Tutorial Go: Memulai Google Go

Mengapa Anda ingin menggunakan bahasa Go? Pada dasarnya, ini adalah bahasa yang dikompilasi singkat, sederhana, aman, dan cepat dengan fitur konkurensi yang luar biasa, dan dengan mudah menangani proyek-proyek besar. Ini juga open source gratis, meskipun awalnya dikembangkan di Google.

Menurut Rob Pike, salah satu perancang bahasa, “tujuan proyek Go adalah untuk menghilangkan kelambanan dan kecanggungan pengembangan perangkat lunak di Google, dan dengan demikian membuat prosesnya lebih produktif dan skalabel. Bahasa ini dirancang oleh dan untuk orang yang menulis — serta membaca dan men-debug serta memelihara — sistem perangkat lunak yang besar. ”

Sesuai dengan tujuan tersebut, Go tidak memiliki banyak fitur dari beberapa bahasa terkemuka lainnya — dan itu sebenarnya adalah kekuatan. Go tidak berorientasi objek, tidak memiliki file header atau deklarasi maju, tidak memiliki hierarki tipe, tidak memiliki metode atau operator yang kelebihan beban, tidak memiliki generik, tidak memiliki mesin virtual untuk runtime, tidak memiliki pengecualian, dan tidak memiliki pernyataan.

Di sisi lain, apa yang Go berhasil dengan baik. Itu dapat mengkompilasi program besar dalam beberapa detik. Ia memiliki coroutine dengan overhead rendah (disebut goroutine ) yang dapat berkomunikasi secara efisien melalui saluran . Ini memiliki antarmuka dan komposisi antarmuka. Selain itu, Go mendukung fungsi kelas satu, fungsi tingkat tinggi, jenis fungsi yang ditentukan pengguna, literal fungsi, closure, dan beberapa nilai kembalian — dengan kata lain, Go mendukung gaya pemrograman fungsional dalam bahasa yang diketik dengan kuat.

Jika Anda sangat ingin meminta fitur apa pun yang hilang yang saya sebutkan di atas, Anda mungkin ingin membaca diskusi tentang perubahan bahasa di FAQ bahasa Go: Jawabannya biasanya “Tidak, karena…” Secara umum, program Go terbaik adalah dirancang dari awal untuk menggunakan fitur bahasa Go, daripada diterjemahkan secara harfiah dari bahasa lain yang menggunakan abstraksi berbeda.

Instal Go

Instruksi singkat untuk menginstal Go muncul di repositori sumber. Anda dapat mengunduh rilis biner Go untuk Windows, MacOS, dan Linux atau menginstal Go dari sumber. Anda akan menemukan instruksi untuk menginstal Go dari sumber di GitHub.

Jika Anda sudah menginstal Go, Anda harus memeriksa versi build saat ini di bagian bawah //golang.org/ dan kemudian memeriksa versi yang Anda instal dari baris perintah:

versi $ go

Jika penginstalan Anda kedaluwarsa, unduh dan instal versi saat ini. Mulai ulang semua prompt perintah terbuka (Windows) atau terminal. Jalankan kembali go versiondan pastikan bahwa versinya sesuai dengan yang Anda harapkan; jika tidak, mungkin ada Go versi lama yang diinstal di tempat lain yang perlu dihapus.

(Tidak, saya tidak paranoid. Saya berhasil masuk ke dalam situasi yang saya gambarkan dengan menggunakan Homebrew untuk menginstal satu versi dan paket standar MacOS untuk menginstal versi berikutnya sebulan atau lebih kemudian. Mereka menginstal ke lokasi yang berbeda di $PATH. Setelah saya mengetahui apa yang terjadi, saya dapat menghapus versi lama dengan Homebrew.)

Pilihan penginstalan lain, jika Anda menginginkan dukungan dan ganti rugi dan Anda mampu membayar, adalah menggunakan ActiveGo.

Setelah Anda memiliki kompiler dan alat Go terinstal, Anda harus melakukan latihan kompilasi dan menjalankan program Go, seperti yang dijelaskan di bagian "Uji instalasi Anda" di halaman penginstalan.

Siapkan lingkungan Go Anda

Pergi programmer biasanya menyimpan semua kode mereka dalam satu ruang kerja, dengan bin, pkg, dan srcfolder. Dalam setiap folder, proyek biasanya memiliki jalur yang berhubungan dengan repositori Git, seperti GitHub atau GitLab. Misalnya, saya menyimpan semua kode bahasa Go saya ~/work, dan menyetel GOPATHvariabel lingkungan saya ke $HOME/work. Jalur ke folder kode sumber "hello.go" saya adalah $GOPATH/src/github.com/meheller/hello.

Saya juga menambahkan GOPATH/bindirektori ke jalur saya, untuk kenyamanan menjalankan program Go dari direktori mana pun:

ekspor GOPATH = $ HOME / kerja

ekspor PATH = $ PATH: $ (go env GOPATH) / bin

Utilitas bahasa Go akan diinstal GOPATHsecara default, jadi meletakkan GOPATH/bindirektori di jalur tersebut juga akan memudahkan Anda dan editor dan IDE Go-aware untuk menemukannya. Anda dapat menginstal sebagian besar utilitas $go get setelah Anda mengetahui mana yang Anda perlukan dan jalur repositori mereka. Repositori biasanya mudah ditemukan dengan pencarian Google. Dalam beberapa kasus, plugin editor untuk Go akan menginstal utilitas (misalnya gocode) secara otomatis.

Jika Anda tidak mengaturnya sendiri, GOPATHdefaultnya $HOME/godi Unix dan MacOS dan %USERPROFILE%/godi Windows.

Gunakan alat bahasa, editor, dan IDE

Beberapa utilitas Go diinstal sebagai bagian dari paket dengan kompilator. Yang lain dapat diinstal dengan go getperintah. Utilitas baris perintah Go yang paling sering digunakan tercantum di bawah ini.

 
Nama Ringkasan
go Mengelola kode sumber Go dan menjalankan perintah lain yang tercantum di sini.
cgo Mengaktifkan pembuatan paket Go yang memanggil kode C.
cover Program untuk membuat dan menganalisis profil cakupan yang dihasilkan oleh go test -coverprofile.
fix Menemukan program Go yang menggunakan fitur lama dari bahasa dan pustaka dan menulis ulang untuk menggunakan yang lebih baru.
fmt Memformat paket Go. Juga tersedia sebagai gofmtperintah independen dengan opsi yang lebih umum.
godoc Mengekstrak dan membuat dokumentasi untuk paket Go.
vet Memeriksa kode sumber Go dan melaporkan konstruksi yang mencurigakan, seperti Printfpanggilan yang argumennya tidak selaras dengan format string.

Cara yang biasa untuk memanggil sebagian besar perintah ini adalah sebagai sub-perintah go, misalnya go fmt. Orang lain perlu dipanggil melalui go toolsubperintah. Pada instalasi saya, go toolkembalikan daftar alat yang dikenal berikut:

alat $ go

addr2line

asm

buildid

cgo

menyusun

penutup

dist

dokter

memperbaiki

tautan

nm

objdump

Pak

pprof

test2json.dll

wisata

jejak

dokter hewan

Alat-alat ini didokumentasikan sebagai bagian dari daftar lengkap perintah Go. Ngomong-ngomong, pastikan Anda GOPATHsudah disetel sebelum menambahkan alat Go, atau plugin editor Go yang menggunakan alat Go.

Repositori Go tidak memiliki editor atau dukungan IDE sejak versi 1.4, tetapi ada banyak dari keduanya yang mengetahui tentang Go, baik di luar kotak atau dengan modul tambahan. Saya membahas banyak di antaranya dalam artikel 2017; ada juga daftar tidak resmi yang dikelola oleh komunitas Golang.

IDE bahasa Go favorit saya adalah GoLand (ditampilkan di atas; diganti namanya dari Gogland sejak saya menulis artikel pada 2017) dan Komodo. Keduanya adalah produk berbayar dengan uji coba gratis.

Anda akan ingin menginstal Delve for Go debugging. Di MacOS, Anda mungkin juga perlu menambahkan utilitas baris perintah ke Xcode, dan mungkin menambahkan tautan lunak ke debugserver, seperti yang dijelaskan dalam komentar 5 Juni di daftar masalah Delve. Berlari xcode-select --installjuga akan memperbaiki masalah tentang menemukan debugserver, meskipun dengan kekerasan.

Editor Go-aware favorit saya dengan GUI adalah Atom dan Visual Studio Code; keduanya gratis. Jika Anda memilih Atom, pertimbangkan untuk menambahkan paket go-plus dan go-debug; jika Anda memilih Visual Studio Code, pertimbangkan untuk menambahkan vscode-go.

Jika Anda adalah pengguna Vim atau Emacs hardcore, maka tetaplah dengan apa yang Anda ketahui — bukan berarti saya bahkan bisa melepaskan editor Anda dari tangan dingin dan mati Anda. Vim-go menambahkan dukungan bahasa Go untuk Vim, dan go-mode menambahkan dukungan bahasa Go untuk Emacs.

Tur Go

Anda dapat belajar sedikit dengan mengikuti "A Tour of Go", baik online maupun offline. Dengan asumsi bahwa Anda telah menyelesaikan instalasi lokal dari kompilator dan alat Go, Anda dapat menginstal tur untuk dijalankan secara lokal dengan menjalankan dua perintah ini:

$ dapatkan golang.org/x/tour/gotour

$ gotour

Baris kedua harus memulai server web dan membuka jendela browser. Ini akan terlihat persis seperti tur online, tetapi mungkin berjalan sedikit lebih cepat karena tur ini membuat dan menjalankan contoh kode di komputer Anda sendiri. Tekan Ctrl-C di jendela perintah untuk menghentikan server setelah Anda selesai.

Tur ini dibagi menjadi tiga bagian. Saya ingin Anda menjalani seluruh tur, termasuk kuis, tetapi saya akan merangkum setiap bagian di bawah sebagai gambaran umum, dan mengajukan beberapa pertanyaan kepada Anda. Saya memberikan jawaban atas pertanyaan saya di akhir artikel (jangan mengintip!). 

Pelajari dasar-dasar bahasa

Mulai Pelajaran Dasar 1

Pertanyaan 1. Dalam contoh ini, ada tiga paket. Apa itu, dan bagaimana menggunakannya? Mengapa program selalu mengembalikan angka yang sama meskipun ada randfungsi?

Perhatikan bahwa saya belum memanggil Pelajaran 2. Jangan melewatkan pelajaran hanya karena saya belum mengomentarinya.

Mulai Pelajaran Dasar 3

Jika Anda menjalankan contoh ini, Anda akan melihat pesan kesalahan:

prog.go: 9: 14: tidak bisa merujuk ke nama yang tidak diekspor math.pi

prog.go: 9: 14: undefined: math.pi

Pertanyaan 2. Mengapa terjadi kesalahan? Bagaimana Anda bisa memperbaiki program?

Mulai Pelajaran Dasar 4

Pertanyaan 3. Bandingkan pernyataan ini dengan padanan di C. Apa yang berbeda?

Mulai Pelajaran Dasar 8

Pertanyaan 4. Mengapa program ini tidak menampilkan kesalahan?

Pergi Dasar-dasar Pelajaran 10

Pertanyaan 5. Jenis apa k? Mengapa? Jika jenisnya tidak jelas, lihat Pelajaran 11 untuk mengetahui cara menampilkannya.

Pergi Dasar-dasar Pelajaran 12

Pelajaran ini menjawab pertanyaan yang saya ajukan di Pelajaran 8.

Pelajaran Go Flow Control 1

Pertanyaan 6. Apa bedanya dengan forloop dalam bahasa favorit Anda? Apakah menurut Anda konstruksi perulangan lain dalam bahasa favorit Anda diperlukan? Apakah informasi tambahan di tiga pelajaran berikutnya berubah pikiran?

Pelajaran Go Flow Control 7

Sebelum menjalankan program ini, periksa terlebih dahulu dan tulis apa yang menurut Anda akan dicetak. Jalankan programnya. Apakah Anda benar? Jika tidak, apa yang tidak Anda mengerti?

Pelajaran Go Flow Control 8

Ini adalah jenis latihan yang mungkin Anda dapatkan di awal wawancara papan tulis. Atur waktu saat Anda mengerjakannya. Katakan apa yang Anda pikirkan saat Anda menyelesaikan masalah.

Pertanyaan 7. Bagian kontrol aliran lainnya penting untuk dipahami. Setelah melalui pelajaran 9 sampai 13, jelaskan pernyataan Go switchdan deferdengan cara yang dapat dilakukan oleh programmer C, Java, atau JavaScript.

Pergi Lebih Banyak Jenis Pelajaran 1

Sebelum menjalankan program ini, periksa terlebih dahulu dan tulis apa yang menurut Anda akan dicetak. Jalankan programnya. Apakah Anda benar? Jika tidak, apa yang tidak Anda mengerti?

Bagaimana perasaan Anda tentang Go memiliki pointer tetapi bukan aritmatika pointer?

Kerjakan melalui bagian More Type sampai Anda menyelesaikan latihan di Pelajaran 18. Pertanyaan 8. Apa yang Anda pelajari tentang array dan slice Go? Sekarang selesaikan latihannya.

Lanjutkan melalui latihan di Pelajaran 23.

Pertanyaan 9. Jelaskan a Go map. Mengapa Anda ingin menggunakannya?

Selesaikan bagian More Type.

Pertanyaan 10. Apakah Go dapat digunakan sebagai bahasa pemrograman fungsional, meskipun telah dikompilasi? Kapan dan mengapa Anda menggunakan closure?

Go metode dan antarmuka

Ikuti semua 25 pelajaran di bagian ini dimulai dengan //tour.golang.org/methods/1.

Pertanyaan 11. Setelah selesai, jelaskan bagaimana penggunaan metode dan antarmuka Go berbeda dari kelas C ++. Mana yang lebih kamu suka? Mengapa?

Lakukan konkurensi

Goroutine adalah salah satu fitur penentu Go untuk konkurensi. Di pelajaran pertama di bagian konkurensi, coba periksa meja program (di bawah) dan tuliskan apa yang menurut Anda akan dicetak.

Jalankan programnya. Apakah Anda benar? Jelaskan apa yang sebenarnya terjadi, dan mengapa.

Saluran adalah cara untuk menyinkronkan goroutine secara implisit. Pada pelajaran berikutnya (di bawah), coba lagi untuk memeriksa meja program sebelum menjalankannya.

Pertanyaan 12. Mengapa hanya ada satu saluran dalam contoh ini, meskipun ada dua panggilan goroutine?

Pernyataan select memungkinkan goroutine menunggu beberapa operasi komunikasi. Apa urutan pernyataan yang dijalankan dalam program di bawah ini?

Latihan tentang pohon biner yang setara adalah hal lain yang mungkin Anda temui dalam wawancara papan tulis. Atur waktu Anda sendiri dan jelaskan pemikiran Anda saat Anda menerapkan solusi. Demikian pula, lakukan latihan menerapkan perayap web seolah-olah Anda sedang dalam wawancara.

Jawaban atas pertanyaan Go

Jawaban 1. Paket ditentukan oleh packagepernyataan untuk program saat ini, dan oleh importpernyataan untuk paket eksternal yang digunakan. Dalam program sederhana ini, mainadalah paket program itu sendiri, dan itu diimpor fmtsehingga dapat mencetak, dan math/ randsehingga dapat menghasilkan nomor acak.

Berbagai metode randbergantung pada waktu jam untuk menghasilkan angka acak, tetapi waktu tetap di gotourlingkungan. Sebagai latihan tindak lanjut, temukan paket dan metode yang melaporkan waktu (petunjuk: lihat di sini jika Anda buntu), dan gunakan untuk mencetak waktu saat ini. Jalankan ini beberapa kali di gotourlingkungan, dan juga buat program secara lokal dan jalankan beberapa kali di komputer Anda sendiri.

Jawaban 2. Ekspor dalam Go harus selalu menggunakan huruf besar, dan bahasanya peka huruf besar / kecil. math.Piadalah metode yang benar.

Jawaban 3. Dalam C / C ++ deklarasi variabel mengikuti bentuk (misalnya int i, j, k;), sedangkan di Go tipe mengikuti nama variabel dan dapat dihilangkan selama jenisnya dapat disimpulkan. Di C / C ++, tipe kembalian mendahului nama fungsi, sedangkan di Go muncul setelah daftar parameter fungsi dan sebelum badan fungsi. Di C / C ++, tanda titik koma di belakang wajib diisi.

Jawaban 4. Tidak menimbulkan kesalahan karena variabel Go yang tidak disetel diinisialisasi ke nilai nol jenisnya, misalnya 0atau false. Di C / C ++, compiler menandai variabel yang tidak diinisialisasi.

Jawaban 5.k adalah bilangan bulat, karena diinisialisasi ke 3.