Skip to content

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.

Ini adalah tampilan awal situs resmi

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.

powershell
PS C:\user\username> go version
go version go1.21.3 windows/amd64

Update hanya perlu mengunduh zip baru untuk menimpa direktori instalasi asli.

Linux

Ambil contoh ubuntu, salin link versi yang diinginkan, unduh ke lokal

sh
$ wget https://golang.google.cn/dl/go1.21.1.linux-amd64.tar.gz

Ekstrak ke direktori yang ditentukan

sh
$ tar -C ~/go -xzf go1.21.1.linux-amd64.tar.gz

Atur variabel lingkungan di file $HOME/.bashrc

sh
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Setelah selesai lihat versi instalasi, konfirmasi instalasi benar

sh
$ go version
go version go1.21.1 linux/amd64

Update 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/
|
|--env

Penjelasan sebagai berikut

  • Direktori go/root untuk menyimpan file sumber berbagai versi bahasa go
  • go/mod sesuai dengan GOAPTH
  • go/mod/libs sesuai dengan GOMODCACHE, yaitu alamat penyimpanan dependensi pihak ketiga yang diunduh
  • go/mod/bin sesuai dengan GOBIN, alamat penyimpanan file biner dependensi pihak ketiga
  • go/cache, sesuai dengan GOCACHE, menyimpan file cache
  • go/temp, sesuai dengan GOTMPDIR, menyimpan file sementara
  • go/env, sesuai dengan GOENV, 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.

ini
GO111MODULE=on
GOCACHE=go/cache
GOMODCACHE=go/mod/libs
GOBIN=go/mod/bin
GOTMPDIR=go/temp

Ini 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.

bash
$ 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/amd64

Jika 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

  1. goland: Produk jetbrain, fungsi powerful, dukungan全方位, tetapi perlu bayar, dapat mempertimbangkan IDEA community edition配合 plugin
  2. 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.
  • Ekosistem Komunitas: Utama menjelaskan ekosistem sekitar Go, cenderung aplikasi.

Kunjungi Mulai Persiapan untuk belajar pemula

Golang by www.golangdev.cn edit