BAB 1: Berkenalan dengan Go
Kenalan dengan Go — bahasa yang lahir dari frustrasi engineer Google terhadap kompleksitas dan lambatnya kompilasi C++ dan Java.
Go lahir dari percakapan di depan whiteboard. Pada 21 September 2007, Robert Griesemer, Rob Pike, dan Ken Thompson — tiga engineer di Google — mulai merancang bahasa baru karena satu alasan sederhana: mereka lelah. Lelah menunggu proyek C++ yang butuh waktu lama untuk dikompilasi, lelah dengan kompleksitas Java yang terus bertambah, dan lelah dengan bahasa-bahasa yang tidak dirancang untuk realita sistem modern yang berjalan di banyak core dan melayani jutaan koneksi sekaligus.
Hasilnya adalah Go — bahasa yang secara resmi diumumkan ke publik pada November 2009 dan merilis versi stabil pertamanya (Go 1.0) pada Maret 2012. Lebih dari satu dekade kemudian, Go menjadi tulang punggung infrastruktur teknologi yang kamu pakai setiap hari: Docker, Kubernetes, Terraform, dan Caddy semuanya ditulis dalam Go.
Mengapa Go Dibuat
Tiga masalah utama yang ingin diselesaikan Go bisa dirangkum begini: bahasa yang cepat dikompilasi, efisien dijalankan, dan mudah dipelajari. Sebelum Go, ketiga hal ini sulit didapat bersamaan. C++ cepat dan efisien, tapi sulit. Python mudah, tapi lambat. Java ada di tengah, tapi membawa beban kompleksitas tersendiri.
Go menjawabnya dengan filosofi yang konsisten: sederhanakan, bukan tambahkan. Hampir setiap keputusan desain Go — dari tidak adanya inheritance sampai tidak ada exception — lahir dari pertanyaan yang sama: “Apakah fitur ini benar-benar diperlukan, atau hanya menambah kerumitan?”
Jawabannya sering kali “tidak perlu” — dan itulah yang membuat Go terasa berbeda.
Apa yang Membuat Go Istimewa
Kompilasi yang cepat
Go mengkompilasi kode ke native machine code, bukan bytecode. Tapi tidak seperti C++ yang bisa memakan waktu menit untuk proyek besar, Go dirancang agar waktu kompilasi tetap pendek bahkan untuk codebase yang besar. Hal ini bukan kebetulan — Go sengaja membatasi dependensi antar package dan memilih model kompilasi yang efisien.
Dalam praktik, go run main.go terasa hampir seperti menjalankan skrip Python: kamu simpan file, jalankan, langsung lihat hasilnya.
Concurrency sebagai fitur utama
Go memperkenalkan goroutine — unit eksekusi yang jauh lebih ringan dari thread sistem operasi. Sebuah program Go biasa bisa menjalankan ribuan goroutine secara bersamaan dengan konsumsi memori yang kecil.
Goroutine berkomunikasi lewat channel, mengikuti prinsip Communicating Sequential Processes (CSP) — filosofi yang mendorong sharing data lewat komunikasi, bukan lewat shared memory yang rawan race condition.
Garbage collection tanpa jeda panjang
Go mengelola memori secara otomatis. Tidak seperti C/C++ yang mengharuskan kamu mengalokasikan dan membebaskan memori secara manual, Go mengurus ini sendiri lewat garbage collector yang dirancang untuk berjalan dengan jeda minimal — sering di bawah satu milidetik. Kamu bisa fokus pada logika program tanpa khawatir memory leak.
Tooling yang sudah built-in
Go datang dengan ekosistem tool yang lengkap tanpa perlu instalasi tambahan:
go fmt— memformat kode secara otomatis, menghilangkan debat soal stylego test— menjalankan unit testgo mod— mengelola dependensigo build— mengompilasi programgo doc— mengakses dokumentasi
Ini berarti seluruh tim bisa langsung bekerja dengan setup yang konsisten sejak hari pertama.
Program Go Pertama
Sebelum masuk lebih dalam, lihat dulu seperti apa kode Go sesungguhnya.
// hello.go
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
Tiga hal yang segera terlihat dari kode ini mencerminkan filosofi Go secara keseluruhan.
Pertama, setiap file Go adalah bagian dari sebuah package. Package main adalah titik masuk program — Go tidak akan menjalankan program yang tidak punya main package dan main function.
Kedua, import dilakukan secara eksplisit. Go sengaja membuat unused import menjadi compile error, bukan sekadar warning. Ini memaksa kode tetap bersih dari dependensi yang tidak terpakai.
Ketiga, tidak ada titik koma di akhir baris. Go menyisipkannya secara otomatis. Tapi Go juga punya pendapat kuat soal penempatan kurung kurawal — tidak ada pilihan, harus di baris yang sama.
Untuk menjalankan program ini:
go run hello.go
Output:
Hello, Go!
Atau untuk mengompilasi menjadi binary yang bisa didistribusikan:
go build hello.go
./hello
Go di Dunia Nyata
Belajar bahasa baru selalu lebih bermakna kalau tahu di mana bahasa itu dipakai secara nyata. Go bukan bahasa akademis — sejak awal dirancang untuk digunakan dalam skala produksi.
Docker dan Kubernetes — dua teknologi yang mendefinisikan cara modern deployment aplikasi — ditulis dalam Go. Terraform untuk infrastructure-as-code, Hugo untuk static site generation, dan CockroachDB untuk distributed database semuanya menggunakan Go.
Alasan yang berulang dari tim-tim ini: Go cukup cepat untuk sistem yang butuh performa tinggi, cukup mudah untuk onboarding engineer baru, dan punya tooling yang cukup matang untuk menjaga kualitas kode di tim besar.
Latihan
Sebelum lanjut ke bab berikutnya, coba eksplorasi dua hal berikut:
- Kunjungi go.dev dan baca halaman utamanya. Perhatikan cara Go mendeskripsikan dirinya sendiri — kata apa yang paling sering muncul?
- Dari daftar proyek yang disebutkan di atas (Docker, Kubernetes, Terraform), pilih satu dan cari tahu: mengapa tim tersebut memilih Go? Jawaban biasanya ada di blog engineering mereka.
Pertanyaan ini tidak punya jawaban yang perlu ditulis — tujuannya membangun intuisi sebelum kamu mulai menulis kode.
Go sudah terpasang di komputer kamu setelah ini, program pertama yang baru saja kamu lihat bisa langsung dijalankan. Bab berikutnya akan memandu instalasi Go step by step dan menyiapkan workspace yang akan dipakai sepanjang ebook ini.