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 #

TahunPeristiwa
2007Griesemer, Pike, dan Thompson mulai merancang Go di Google
2009Go diumumkan dan dirilis ke publik sebagai proyek open source berlisensi BSD (November 2009)
2012Go 1.0 dirilis; janji kompatibilitas Go 1 mulai berlaku
2012–sekarangRilis major baru keluar kira-kira setiap enam bulan; hanya dua rilis major terakhir yang didukung resmi
2026Go 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 ditolakAlasan filosofisPengganti di Go
class dan inheritanceHierarki kelas memaksa coupling yang rapuh antar komponenstruct, embedding, dan interface (komposisi)
ExceptionAlur kontrol yang melompat tersembunyi sulit dilacakError sebagai nilai biasa yang diperiksa eksplisit
Operator ternary ?:Ekspresi bersarang memudarkan alur bacaPernyataan if/else eksplisit
Konversi type implisitPerubahan diam-diam melahirkan bug halusKonversi yang selalu ditulis eksplisit
Variable tak terpakaiKode mati menyesatkan pembacaError 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.