Panduan Pemula Go

Artikel ini akan memandu Anda cara memulai belajar bahasa Go, hanya dari aspek syntax tidaklah sulit untuk dipelajari, Anda mungkin bisa menguasainya dalam beberapa hari. Namun sesuai konvensi, sebelum正式开始, kita perlu terlebih dahulu memahami latar belakang dan asalnya.
Latar Belakang
Bahasa Go diciptakan oleh tiga tokoh besar, mereka分别是
- Ken Thompson, penerima Turing Award, pendiri sistem Unix, pendiri bahasa B, pendiri bahasa C
- Rob Pike, salah satu penulis sistem operasi Plan9, salah satu penemu UTF-8, pemimpin desain bahasa Go
- Robert Griesemer, pengembang JS V8 engine, yang termuda di antara ketiganya
Ada satu lagi adalah istri Rob Pike, Renee French, yang mendesain Logo bahasa Go, yaitu seekor tupai tanah berwarna biru.

Pada suatu hari, selama menunggu kompilasi proyek C++ yang panjang, tiga insinyur merasa sangat bosan,正是在 momen ini, Rob Pike tiba-tiba terlintas sebuah gagasan baru: ia berharap mendesain bahasa pemrograman yang sederhana, kecil, kompilasi cepat, dan memiliki kinerja yang baik, sehingga mereka tidak perlu menunggu lama setiap kali kompilasi. Setelah brainstorming singkat, ketiganya pada 20 September 2007 mengadakan pertemuan singkat, mulai mendiskusikan dan mendesain prototipe awal bahasa ini,正是在 momen ini, Go bahasa secara resmi lahir. Selanjutnya, tim kecil ini menarik semakin banyak pengembang yang sepaham, akhirnya pada 10 November 2009, Google secara resmi meng-open source bahasa Go dengan lisensi BSD-3-Clause, dan meluncurkan versi先行 pertama, serta membentuk tim pengembang resmi.
Tips
Perlu dicatat, Anda mungkin melihat seseorang menyebutnya Golang di tempat lain, termasuk nama repositori Github situs ini juga disebut Golang-Doc, tetapi nama resminya sebenarnya selalu Go, pada awal karena domain go direbut, jadi domain situs resmi mengadopsi golang.org, sehingga orang baru salah mengira namanya Golang.

Setelah itu, tim Go经过 tiga tahun desain dan pengembangan, pada Maret 2012 merilis versi resmi pertama Go1.0 (pada saat ini toolchain dan runtime Go masih ditulis dalam bahasa C, hingga Go1.5 baru menyelesaikan bootstrap), setelah itu setiap tahun merilis dua versi kecil update, terus beroperasi dan memelihara hingga sekarang.
Tiga pendiri sebenarnya sudah mundur sejak lama, dalam sebagian besar waktu, pemimpin tim adalah Russ Cox, ia sejak sebelum Go bahasa dirilis kepada publik sudah terlibat dalam pekerjaan pengembangan, setelah itu terus mengelola tim Go selama 12 tahun, hingga Agustus 2024 mengundurkan diri, digantikan oleh Austin Clements untuk mengambil alih dan memimpin pekerjaan pengembangan selanjutnya.
Jika ingin memahami lebih dalam sejarah bahasa Go, kunjungi Go History untuk mempelajari lebih banyak konten.
Fitur
- Syntax sederhana Bahasa Go melakukan trade-off antara kebebasan dan fleksibilitas, untuk换取 maintainability yang lebih baik dan learning curve yang halus.
- Deployment ramah File biner hasil kompilasi statis Go tidak bergantung pada environment runtime tambahan, kecepatan kompilasi juga sangat cepat.
- Kompilasi silang Go hanya perlu mengatur dua parameter sederhana saat kompilasi, dapat mengkompilasi program yang dapat dijalankan di platform lain
- Konkurensi alami Dukungan Go untuk konkurensi adalah alami, hanya dengan satu keyword, dapat memulai satu goroutine asynchronous.
- Garbage collection Go memiliki kinerja GC yang sangat baik, sebagian besar情况下 delay GC tidak akan melebihi 1 milidetik.
- Standard library yang kaya Dari pemrosesan string hingga parsing AST source code, standard library yang powerful dan kaya adalah fondasi yang kuat bahasa Go.
- Toolchain yang lengkap Go memiliki toolchain pengembangan yang lengkap, mencakup kompilasi, testing, manajemen dependensi, analisis kinerja, dan berbagai aspek.
Bahasa Go meninggalkan inheritance, melemahkan OOP, class, metaprogramming, generik, ekspresi Lamda, dan fitur-fitur ini, memiliki kinerja yang baik dan difficulty to learn yang rendah, cocok untuk pengembangan cloud service, pengembangan application server, dan network programming. Go dilengkapi dengan GC, tidak memerlukan developer mengelola memori secara manual, static compilation dan cross compilation ini juga sangat ramah bagi operations.
Kekurangan bahasa Go juga banyak, seperti error handling yang sering dikritik, generik yang tidak lengkap, standard library meskipun kaya tetapi built-in data structure hanya beberapa, tipe interface{} terbang di mana-mana, tidak ada enum type, selain itu, tim pengembang Go sangat stubborn, tidak pandai mendengarkan opini komunitas, dll. (Dibandingkan, Rust dalam error handling, generik, manajemen dependensi, enum, interface, dan aspek lainnya做得 jauh lebih baik)
Secara keseluruhan, kita perlu memandang bahasa secara dialektis, sebagai bahasa engineering, Go dapat sangat meningkatkan lower bound tim, bahkan jika level developer buruk pun masih bisa di-cover, jarang terjadi satu tikus merusak satu panci sup,同时 karena syntax sederhana dan learning difficulty yang rendah, dapat membuat orang cepat menguasai proyek. Meskipun Go baru berusia sepuluh tahun lebih, sudah cukup banyak perusahaan menjadikan Go sebagai bahasa pilihan pertama, juga dapat menunjukkan Go sedang secara bertahap menjadi populer.
Ngomong-ngomong, Go masih bahasa yang sepenuhnya open source, dikembangkan bersama oleh komunitas dan Google, alamat resmi ada di repositori Google, di Github ada mirror repositori yang sama, jika berminat juga dapat berpartisipasi dalam desain bahasa.
Situs resmi: The Go Programming Language
Repositori open source Google: google/go: Google Open Source
Repositori Github: golang/go: The Go programming language
TIP
Penulis pernah mengirimkan PR ke Go, jika ingin tahu cara berkontribusi kode ke Go, dapat lihat artikel yang saya tulis: Cara Berkontribusi Kode ke Go.
Percaya banyak orang sudah pernah mendengar Rust, ini adalah bahasa pemrograman umum berkinerja tinggi, waktu kelahirannya lebih awal satu tahun dari Go, waktu rilis resmi Go1 adalah 2012, waktu rilis resmi Rust adalah 2015, keduanya adalah bahasa yang relatif modern, kedua bahasa ini penulis sangat suka, bidang pengembangan mereka masing-masing berbeda, jika tidak puas dengan execution efficiency dan expression ability Go, boleh coba Rust, tetapi learning difficulty-nya jauh tidak sesederhana Go.
Instalasi
Unduhan bahasa Go: Downloads - The Go Programming Language

Stable Version mengacu pada dua versi stabil yang saat ini dalam maintenance, Archived Version mengacu pada versi historis yang tidak lagi dipelihara, kunjungi Changelog untuk mempelajari lebih banyak tentang aturan maintenance dan informasi versi historis.
Windows
Untuk platform windows, ada dua tipe yang dapat dipilih yaitu installer dan archive, yang pertama adalah paket instalasi, hanya perlu klik-klik, direkomendasikan menggunakan yang后者, akan membuat Anda lebih familiar dengan struktur direktori bahasa go, di masa depan jika ada masalah tidak akan bingung. Pilih untuk mengunduh file zip, file kompresi berisi kode sumber bahasa go serta toolchain dan beberapa dokumentasi, ekstrak ke path yang ditentukan, kemudian perlu mengkonfigurasi dua variabel lingkungan sistem.
- GOROOT - path instalasi bahasa go
- GOPATH - path penyimpanan dependensi bahasa go
Setelah diatur, tambahkan dua item baru ke variabel lingkungan sistem PATH
%GOROOT%\bin: Ini adalah alamat program biner go%GOPATH%\bin: Ini adalah alamat penyimpanan file biner dependensi pihak ketiga yang akan diunduh di masa depan
Jalankan perintah go version di powershell, akhirnya dapat menampilkan versi dengan normal menunjukkan instalasi benar.
PS C:\user\username> go version
go version go1.21.3 windows/amd64Update hanya perlu mengunduh zip baru untuk menimpa direktori instalasi asli.
Linux
Ambil contoh ubuntu, salin link versi yang diinginkan, unduh ke lokal
$ wget https://golang.google.cn/dl/go1.21.1.linux-amd64.tar.gzEkstrak ke direktori yang ditentukan
$ tar -C ~/go -xzf go1.21.1.linux-amd64.tar.gzAtur variabel lingkungan di file $HOME/.bashrc
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/binSetelah selesai lihat versi instalasi, konfirmasi instalasi benar
$ go version
go version go1.21.1 linux/amd64Update hanya perlu mengunduh tar.gz baru untuk menimpa direktori instalasi asli.
Manajemen Instalasi
Cara instalasi di atas sudah cukup untuk penggunaan dasar, pribadi direkomendasikan menggunakan struktur direktori berikut untuk menyimpan bahasa go dan file turunannya
go/
|
|--root/
| |
| |--go1.21.3/
| |
| |--go1.20.10/
|
|--mod/
| |
| |--bin/
| |
| |--libs/
|
|--cache/
|
|--temp/
|
|--envPenjelasan sebagai berikut
- Direktori
go/rootuntuk menyimpan file sumber berbagai versi bahasa go go/modsesuai denganGOAPTHgo/mod/libssesuai denganGOMODCACHE, yaitu alamat penyimpanan dependensi pihak ketiga yang diunduhgo/mod/binsesuai denganGOBIN, alamat penyimpanan file biner dependensi pihak ketigago/cache, sesuai denganGOCACHE, menyimpan file cachego/temp, sesuai denganGOTMPDIR, menyimpan file sementarago/env, sesuai denganGOENV, file konfigurasi variabel lingkungan global
Cara ini saat update tidak perlu menimpa direktori instalasi asli, hanya perlu menyimpannya di direktori go/root, kemudian mengubah variabel lingkungan sistem GOROOT ke folder versi yang ditentukan di direktori tersebut. Secara default file env membaca path GOROOT/env, dengan mengatur variabel sistem GOENV memisahkannya dari GOROOT, menghindari perubahan konfigurasi variabel lingkungan go karena perubahan versi, berikut adalah pengaturan awal file env.
GO111MODULE=on
GOCACHE=go/cache
GOMODCACHE=go/mod/libs
GOBIN=go/mod/bin
GOTMPDIR=go/tempIni hanya gaya direktori yang penulis sukai, kunjungi Perintah-Variabel Lingkungan untuk mempelajari lebih banyak tentang informasi variabel lingkungan, Anda dapat sepenuhnya menyesuaikan sesuai preferensi pribadi.
Manajemen Multi Versi
Saya menulis alat manajemen multi versi govm, efek terbaik digunakan bersama dengan struktur direktori di atas. Alat ini dapat mengelola beberapa versi Go lokal, dapat beralih versi kapan saja, juga dapat mencari dan mengunduh versi Go lainnya dan menginstalnya ke lokal.
$ govm search 1.22 -n 10
go1.22.6 76 MB
go1.22.5 76 MB
go1.22.4 76 MB
go1.22.3 76 MB
go1.22.2 76 MB
go1.22.1 76 MB
go1.22.0 76 MB
$ govm install 1.22.4
Fetch go1.22.4 from https://dl.google.com/go/go1.22.4.windows-amd64.zip
Downloading go1.22.4.windows-amd64.zip 100% |████████████████████████████████████████| (76/76 MB, 32 MB/s) [2s]
Extract go1.22.4.windows-amd64.zip to local store
Remove archive from cache
Version go1.22.4 installed
$ govm use 1.22.4
Use go1.22.4 now
# Login ulang shell
$ go version
go version go1.22.4 windows/amd64Jika ingin tahu cara menulis alat command line dengan Go, tidak keberatan boleh menjadikan govm sebagai referensi proyek, ini juga ditulis dengan Go.
Editor
IDE bahasa go mainstream saat ini pribadi hanya merekomendasikan dua berikut
- goland: Produk jetbrain, fungsi powerful, dukungan全方位, tetapi perlu bayar, dapat mempertimbangkan IDEA community edition配合 plugin
- vscode: Tidak perlu bayar, editor universal, dengan plugin dukungan bahasa apa pun bisa ditulis
Jika ada editor lain yang lebih sesuai dengan kebiasaan penggunaan pribadi juga bisa digunakan, menggunakan editor apa tidak masalah, jika hanya menulis beberapa kode latihan singkat, dapat mencoba goplay yang disediakan resmi, dapat menjalankan kode go online.
TIP
Jika sedang menggunakan JetBrains Toolbox, dapat mencoba alat command line yang saya tulis AutoToolBox, dapat menghasilkan menu klik kanan windows untuk Toolbox, gambar preview sebagai berikut.

Harapan
Keseluruhan kesulitan bahasa Go tidak tinggi, jika memiliki dasar bahasa lain akan sangat mudah untuk belajar, selama proses belajar jika menemui titik sulit yang tidak dipahami boleh dilewati dulu, belajar bahasa apa pun adalah pertama memahami syntax dan struktur bahasa secara umum, baru mendalami beberapa fitur dan detail, filosofi dokumentasi juga demikian, cocok untuk belajar pemula. Penulis sendiri juga hanya siswa biasa, pasti ada kelalaian dan koreksi, jika menemukan error apa pun dapat mengirimkan PR di Github, jika merasa dokumentasi cukup baik boleh berikan Star di Github.
Jika Anda developer bahasa OOP kuat, seperti Java, C#, dll., jangan membawa pemikiran OOP secara subjektif, jika tidak akan merasa banyak desain go sangat membingungkan, saat menulis kode juga akan sangat tidak nyaman, penulis最开始 juga demikian.
Ikhtisar
Berikut adalah pengenalan sederhana konten situs ini, agar各位 dapat membaca sesuai kebutuhan, beberapa halaman kosong menunjukkan belum diupdate.
- Pengenalan Bahasa: Utama menjelaskan konten tentang bahasa Go itu sendiri, cenderung teori.
- Dasar Syntax: Utama membahas beberapa syntax yang sangat dasar, seperti aturan syntax
if,for, dll. - Syntax Lanjutan: Membahas beberapa hal unik Go, tentang modul, testing, goroutine, dan konten terkait.
- Standard Library: Pengenalan sederhana tentang standard library bawaan Go, karena konten standard library sangat besar jadi update sesuai mood.
- Prinsip Implementasi: Utama membahas beberapa prinsip desain internal bahasa Go, seperti penjadwalan goroutine, manajemen memori, garbage collection, dll.
- Dasar Syntax: Utama membahas beberapa syntax yang sangat dasar, seperti aturan syntax
- Ekosistem Komunitas: Utama menjelaskan ekosistem sekitar Go, cenderung aplikasi.
- Database: Mengoperasikan database mainstream dengan Go.
- Microservice: Memperkenalkan beberapa alat microservice yang terkait dengan Go.
- Library Pihak Ketiga: Memperkenalkan beberapa library pihak ketiga yang ditulis dengan Go, update sesuai mood, juga dapat langsung lihat di Navigasi Dependensi.
Kunjungi Mulai Persiapan untuk belajar pemula
