Sebuah bahasa pemrograman adalah karya rekayasa, dan setiap keputusan desainnya menyimpan jejak masalah yang hendak diperbaiki. Memahami sejarah Go membantu kita memaklumi aturan-aturan yang pada awalnya terasa aneh: mengapa tidak ada class, mengapa error berupa nilai biasa, dan mengapa compiler begitu keras pada variable yang tidak terpakai. Pada chapter ini kita menelusuri kelahiran Go di Google, memetakan linimasa rilisnya, lalu membedah filosofi kesederhanaan yang menjadi tulang punggung desainnya.
Awal Mula di Google #
Go mulai dirancang pada tahun 2007 di Google oleh tiga insinyur: Robert Griesemer, Rob Pike, dan Ken Thompson. Pada masa itu Google mengelola codebase berukuran raksasa yang ditulis terutama dalam C++, Java, dan Python. Tiga keluhan muncul berulang kali: waktu kompilasi C++ yang sangat panjang untuk codebase besar, kompleksitas bahasa yang membuat programmer sibuk mengurus fitur bahasa ketimbang logika bisnis, dan model threading lama yang tidak produktif di era server multicore serta jaringan berkecepatan tinggi.
Ketiga perancang Go kemudian menyusun daftar tujuan desain yang tetap terasa sampai sekarang: bahasa yang dikompilasi dengan kecepatan kompilasi tinggi, statically typed, dilengkapi concurrency berbasis gagasan CSP (Communicating Sequential Processes), memiliki garbage collection, dan menghasilkan binary yang dapat dijalankan tanpa runtime terpisah. Gagasan CSP inilah yang kelak melahirkan goroutine dan channel.
Linimasa Rilis Penting #
| Tahun | Peristiwa |
|---|---|
| 2007 | Griesemer, Pike, dan Thompson mulai merancang Go di Google |
| 2009 | Go diumumkan dan dirilis ke publik sebagai proyek open source berlisensi BSD (November 2009) |
| 2012 | Go 1.0 dirilis; janji kompatibilitas Go 1 mulai berlaku |
| 2012–sekarang | Rilis major baru keluar kira-kira setiap enam bulan; hanya dua rilis major terakhir yang didukung resmi |
| 2026 | Go berada pada versi 1.27 — versi yang dipakai Course ini |
Dua baris terakhir tabel tersebut penting untuk pemula: setiap rilis major Go didukung penuh hanya sampai dua versi major lebih baru tersedia, sehingga tim dianjurkan ikut memutakhirkan toolchain secara berkala. Di sisi lain, janji kompatibilitas Go 1 menjamin program yang ditulis untuk Go 1 tetap terkompilasi oleh compiler versi baru — perlindungan investasi belajar yang jarang ditawarkan bahasa lain.
Masalah yang Ingin Dijawab Go #
Filosofi Go tidak dapat dipisahkan dari tiga masalah asalnya. Pertama, lambatnya build: Go sengaja menjaga grammar kecil dan dependency ramping agar compiler bekerja cepat pada codebase sebesar apa pun. Kedua, kompleksitas bahasa: Go memilih menolak sebagian besar fitur yang dianggap tidak esensial daripada menambahnya, karena setiap fitur baru selalu menambah beban baca bagi orang lain. Ketiga, concurrency di era multicore: model goroutine dan channel membuat program yang memanfaatkan banyak core ditulis dengan gaya yang sederhana, tanpa penguncian manual yang rawan galat di mana-mana.
Filosofi: Sederhana dan Mudah Dibaca #
Semangat utama Go diringkas dalam kalimat pendek: less is more — lebih sedikit fitur, lebih banyak kejelasan. Kode dibaca jauh lebih sering daripada ditulis, sehingga Go mengoptimalkan pengalaman pembaca, bukan kecepatan menulis trik singkat. Salah satu peribahasa Go yang paling terkenal, “clear is better than clever”, menegaskan hal yang sama: kode yang jelas mengalahkan kode yang cerdik.
Prinsip tersebut diwujudkan dalam beberapa kebiasaan baku: hanya ada satu cara memformat kode (gofmt) sehingga perdebatan gaya hilang dari tim; satu cara mendeklarasikan fungsi; dan satu pustaka standar yang memakai konvensi penamaan konsisten. Kosakata bahasanya sengaja dijaga tetap kecil — tepat 25 keyword — sehingga seluruh tim berbicara dengan pola yang sama.
Desain yang Berani Menolak #
Bagian paling menarik dari filosofi Go adalah daftar fitur yang sengaja tidak disediakan. Setiap penolakan punya alasan dan penggantinya:
| Fitur yang ditolak | Alasan filosofis | Pengganti di Go |
|---|---|---|
class dan inheritance | Hierarki kelas memaksa coupling yang rapuh antar komponen | struct, embedding, dan interface (komposisi) |
| Exception | Alur kontrol yang melompat tersembunyi sulit dilacak | Error sebagai nilai biasa yang diperiksa eksplisit |
Operator ternary ?: | Ekspresi bersarang memudarkan alur baca | Pernyataan if/else eksplisit |
| Konversi type implisit | Perubahan diam-diam melahirkan bug halus | Konversi yang selalu ditulis eksplisit |
| Variable tak terpakai | Kode mati menyesatkan pembaca | Error kompilasi sejak awal |
Referensi #
- Go: Ten Years — tulisan resmi Rob Pike tentang satu dekade pertama Go dan asal usul desainnya.
- Go 1 Compatibility Guarantee — naskah janji kompatibilitas yang menjaga kode Go 1 tetap hidup lintas versi.
- Go FAQ — penjelasan resmi mengapa banyak fitur populer tidak masuk ke Go.
Sejarah memberi kita konteks, dan filosofi memberi kita kerangka berpikir yang benar sejak awal. Dengan kerangka tersebut, langkah berikutnya adalah menimbang Go secara jujur: di wilayah mana Go unggul, dan pada kondisi apa Go justru kurang tepat dipilih. Chapter berikutnya memetakan kelebihan dan batasan tersebut secara berimbang.