Halo semuanya, pada awal dimulainya utas baru pada kursus
"Pengembang Golang", kami ingin membagikan terjemahan artikel yang menarik kepada Anda, di bagian pertama kami memahami elemen-elemen yang ada di Go. Ayo pergi.
Go dibuat dengan melihat ke belakang, dan paket dasarnya benar-benar tersusun dengan baik: ia memiliki pengumpulan sampah, paket, fungsi kelas satu, ruang lingkup leksikal, antarmuka panggilan sistem dan garis yang tidak dapat diubah, teks yang biasanya dikodekan dalam UTF-8. Tetapi memiliki fitur yang relatif sedikit dan tidak mungkin menambah jumlahnya. Misalnya, ia tidak memiliki konversi numerik implisit, tidak ada konstruktor atau destruktor, tidak ada kelebihan operator, tidak ada nilai parameter default, tidak ada pewarisan, tidak ada generik, tidak ada pengecualian, tidak ada makro, tidak ada penjelasan fungsi, dan tidak ada penyimpanan aliran lokal.Sebelum membaca : Di atas adalah kutipan dari buku karya Alan A. A. Donovan dan Brian W. Kernigan "Go Programming Language". halaman xiv. Item yang disebutkan di bawah ini adalah penjelasan singkat dan agak tidak lengkap dari istilah yang digunakan dalam merancang bahasa pemrograman. Saya mencoba menjelaskan semua konsep dalam hal pemrograman on Go. Semua poin yang disebutkan di bawah ini bukan kepengarangan saya, mereka diambil dari ekstrak lain. Saya sama sekali tidak melindungi Go atau bahasa lainnya.
Sekarang kita akan mencoba memahami setiap istilah secara singkat. Untuk pemula dalam pemrograman umum, mengetahui istilah-istilah ini sangat penting. Arti dari semua konsep ini berlaku dalam setiap bahasa pemrograman. Istilah-istilah ini dapat membantu Anda membedakan antara berbagai bahasa di tingkat dasar.
Elemen yang ada di Go
Pengumpulan sampah
Mekanisme ini hadir dalam bahasa pemrograman apa pun yang melakukan manajemen memori otomatis. Untuk memahami pengumpulan sampah atau manajemen memori, Anda harus terlebih dahulu memahami cara kerja memori itu sendiri. Ketika bekerja dengan bahasa pemrograman, kompiler menetapkan berbagai ruang memori dalam sistem untuk menyimpan data, misalnya, membuat variabel, mengulang melalui array, dll. Alokasi dan redistribusi memori harus dilaksanakan untuk membuat program bekerja dengan memori lebih efisien.
Dalam bahasa seperti C, memori dikelola secara manual. Jika Anda terbiasa dengan C, Anda tahu bahwa ada fungsi malloc yang secara dinamis mengalokasikan memori dalam sistem. Dalam bahasa tingkat tinggi seperti JavaScript atau Python, alokasi ini secara otomatis dilakukan oleh program yang dikenal sebagai pemulung. Sesuai namanya, tugasnya adalah mengelola memori, mengalokasikan ruang saat dibutuhkan, dan membebaskan memori yang dialokasikan saat tidak ada lagi. Go mengimplementasikan pengumpulan sampah, sehingga programmer tidak perlu khawatir tentang manajemen memori.
Paket
Pengemasan adalah kombinasi dari semua kode sumber dan sumber daya menjadi satu objek yang disebut paket. Paket perangkat lunak nyaman dalam banyak hal, seperti instalasi mudah, berbagi, menambah, debugging, dll. Go memiliki sistem paket terintegrasi yang mengintegrasikan file dokumentasi, binari, dan kode sumber. Tujuan pengemasan adalah untuk menggunakan proyek perangkat lunak lain dalam perangkat lunak Anda tanpa harus menyalin kode sumber secara manual.
Fungsi kelas satu
Fungsi dari kelas pertama adalah fungsi yang dapat diproses seperti variabel lainnya, yaitu, dapat ditugaskan, dikembalikan, diekspor, diteruskan sebagai parameter, dll. Lihat potongan berikut yang ditulis dalam Go. Fungsi yang mencetak string
hello world first class function
ditugaskan ke variabel
a
. Variabel a berperilaku seperti nilai aktual dalam memori, namun juga dapat disebut sebagai fungsi dengan menambahkan
()
di akhir. Anda juga dapat melihat bahwa nilai a ditampilkan dengan cara yang sama seperti variabel lainnya. Ini adalah konsep dasar fungsi kelas satu.
package main import ( "fmt" ) func main() { a := func() { fmt.Println("hello world first class function") } a() fmt.Printf("%T", a) }
Lingkup leksikal
Ruang lingkup dalam suatu program mirip dengan blok atau ruang lingkup di mana definisi dari setiap variabel / fungsi valid. Misalnya, variabel yang dideklarasikan di dalam fungsi mempertahankan nilainya hanya di dalam blok fungsi ini, yaitu antara kurung kurawal
{}
. Jika Anda mencoba mengakses nilai variabel seperti itu di luar blok fungsi ini, program tidak akan dapat menemukannya.
package main import “fmt” func main() { { v := 1 { fmt.Println(v) } fmt.Println(v) } fmt.Println(v)
Dalam fragmen yang diberikan ada empat bidang visibilitas. Yang pertama adalah wilayah global, yang kedua adalah fungsi
main ()
, yang ketiga adalah blok pertama di dalam fungsi
main
, dan yang keempat adalah wilayah di mana
fmt.Println
dipanggil untuk pertama kalinya. Dari ketiga
Println
terakhir melempar kesalahan kompilasi. Ini karena definisi dari variabel
v
hanya tersedia di area tiga dan empat. Ketika
Println
dipanggil dengan
v
dilewatkan sebagai parameter, program pertama-tama mencari definisi di area saat ini, ketika tidak dapat menemukannya, ia bergerak ke luar dalam lingkup induk dan akan terus melakukan ini sampai menemukan definisinya. Ini adalah ruang lingkup leksikal - program mulai mencari definisi variabel dan fungsi dari area di mana mereka digunakan / dipanggil, dan bergerak keluar. Dalam program
fmt.Println
terakhir, tidak mungkin menemukan definisi
v
di area saat ini atau di area induk mana pun, sehingga ada kesalahan kompilasi.
Antarmuka panggilan sistem
Go hadir dengan antarmuka panggilan sistem yang berfungsi sebagai referensi untuk panggilan sistem yang tersedia untuk sistem operasi. Misalnya, membuka dan membaca file, input dan output, dll. Ini memotong panggilan fungsi di API dan memanggil panggilan sistem yang diperlukan dalam sistem operasi.
String yang tidak bisa diubah
Meskipun sintaksis Go mirip dengan C, sintaksis ini memiliki keunggulan di atasnya dalam bentuk garis yang tidak dapat diubah yang dikodekan dalam UTF-8. Yaitu, program yang ditulis dalam Go dapat membentuk string menggunakan banyak bahasa dan karakter. Sederhananya, string adalah kombinasi / array / daftar karakter dalam bahasa pemrograman. Karena string dibentuk dengan menggabungkan karakter, komposisi mereka dapat diubah. Karakter dapat ditambahkan, dihapus, dipindahkan, dll. Kami mempertimbangkan metode yang menjamin keabadian suatu string setelah dideklarasikan. Konsep string tidak berubah bukanlah hal baru, dalam contoh Python String objek tidak dapat dimutasi, JavaScript juga memiliki string tidak berubah, dan Ruby menambahkan
Frozen String Literals dalam 2.3. Tetapi, bagaimanapun, banyak bahasa populer, seperti C ++, PHP, Perl, dll., Tidak memiliki string yang tidak dapat diubah.
Jadi, pada bagian akhir artikel ini berakhir. Di dalamnya, elemen-elemen yang ada di Go dibongkar, dan tentang apa yang tidak ada di Go, Anda dapat membaca di bagian
kedua artikel .