Setiap bahasa pemrograman lahir dari sekumpulan masalah nyata, dan memahami masalah tersebut adalah langkah pertama sebelum menulis satu baris kode. Go adalah bahasa pemrograman open source yang dikembangkan di Google sejak tahun 2007 dan dirilis ke publik pada November 2009. Saat ini Go dipakai untuk membangun perangkat lunak berskala besar: server jaringan, alat infrastruktur cloud, command line application, hingga database terdistribusi. Pada chapter ini kita akan memetakan karakter dasar Go — bahasa yang dikompilasi, statically typed, dan dilengkapi concurrency bawaan — sebagai bekal sebelum menyelami detail sintaksnya.
Definisi Singkat Go #
Go — sering disebut juga Golang agar mudah dicari di mesin pencari — adalah bahasa pemrograman general purpose yang dikompilasi dan statically typed. Robert Griesemer, Rob Pike, dan Ken Thompson mulai merancang Go di Google pada tahun 2007, lalu Go dirilis sebagai proyek open source dengan lisensi bergaya BSD pada tahun 2009.
Go lahir dari keluhan sehari-hari insinyur Google: codebase raksasa dengan waktu kompilasi yang panjang, kompleksitas bahasa yang terus bertumpuk, serta perangkat keras multicore yang belum termanfaatkan oleh model pemrograman lama. Ketiga perancangnya tokoh berpengalaman: Ken Thompson perancang bahasa B dan turunan awal Unix, Rob Pike alumni tim Unix sekaligus salah satu pencipta UTF-8, dan Robert Griesemer peneliti bahasa pemrograman di Google. Pengalaman tersebut membentuk tujuan desain Go yang konsisten hingga kini: kompilasi cepat, concurrency yang aman, garbage collection, dan hasil akhir berupa satu binary statis.
Bahasa yang Dikompilasi #
Compiler Go menerjemahkan source code menjadi machine code native sebelum program dijalankan. Pendekatan ini berbeda dengan bahasa seperti Python, PHP, atau Ruby yang menerjemahkan kode baris demi baris saat program berjalan. Konsekuensinya terasa di dua titik: banyak kesalahan tertangkap saat kompilasi, jauh sebelum program sampai ke pengguna, dan hasilnya berupa binary yang dijalankan langsung oleh sistem operasi tanpa interpreter di mesin target.
Compiler bawaan Go dikenal dengan sebutan gc dan menjadi jalur standar bagi hampir seluruh pengguna. Sebagai alternatif, gccgo — compiler Go yang dibangun di atas GCC — cukup kita kenal sekilas.
Perbandingan berikut merangkum perbedaan pendekatan kedua keluarga bahasa:
| Aspek | Bahasa dikompilasi (Go, C, Rust) | Bahasa diinterpretasi (Python, PHP, Ruby) |
|---|---|---|
| Proses utama | Source code diterjemahkan penuh menjadi machine code sebelum eksekusi | Source code diterjemahkan bertahap saat eksekusi berjalan |
| Bentuk hasil | File binary native | Tidak ada binary; program berupa teks yang dibaca interpreter |
| Kesalahan tipe | Mayoritas tertangkap compiler | Banyak baru muncul ketika baris kode dijalankan |
| Kebutuhan di mesin target | Binary mandiri, tanpa runtime tambahan | Interpreter beserta pustaka harus terpasang |
Bahasa yang Statically Typed #
Setiap variable di Go memiliki satu type yang sudah pasti sejak dikompilasi: int, string, bool, hingga bentukan seperti struct dan interface. Compiler menolak operasi yang mencampur type secara diam-diam; ketika kita ingin mengubah int menjadi float64, konversinya harus ditulis secara eksplisit.
Aturan yang ketat tersebut ditopang kosakata yang justru sangat ramping: Go hanya memiliki tepat 25 keyword menurut spesifikasi resmi bahasa. Grammar kecil tersebut membuat seorang programmer dapat menguasai seluruh bahasa dalam hitungan minggu, dan setiap orang di tim menulis kode dengan pola yang sama.
Empat Pilar Desain Go #
Karakter Go paling mudah diingat melalui empat komitmen desain berikut:
- Kompilasi cepat — compiler gc dirancang agar codebase besar sekalipun terbangun dalam hitungan detik, menjawab luka lama build C++ yang bisa puluhan menit.
- Concurrency bawaan — goroutine adalah unit eksekusi ringan dengan stack awal hanya beberapa kilobyte; ribuan goroutine dapat berjalan dalam satu proses dan berkomunikasi lewat channel. Jumlah thread sistem operasi yang menjalankan kode Go diatur oleh
GOMAXPROCS. - Garbage collection — Go mengelola memori secara otomatis, sehingga programmer terbebas dari alokasi dan pembersihan manual, sambil tetap menghasilkan binary yang dikompilasi.
- Satu binary statis — hasil
go buildadalah satu file mandiri yang membawa runtime dan seluruh kebutuhannya; menyalin file itu ke server tanpa Go sekalipun tetap membuat program berjalan.
Referensi #
- Dokumentasi resmi Go — pintu masuk utama seluruh dokumentasi bahasa dan toolchain.
- Go FAQ — jawaban resmi atas pertanyaan mendasar tentang desain Go, termasuk alasan fitur tertentu sengaja tidak ada.
- Learning Go — daftar materi belajar resmi yang dikurasi tim Go.
Dengan kartu identitas Go di tangan, kita sudah tahu bahasa apa yang sedang kita pelajari dan untuk kelas perangkat lunak apa Go dirancang. Karakteristik tersebut tidak muncul begitu saja: semuanya berasal dari keputusan-keputusan historis yang kemudian mengeras menjadi filosofi desain. Chapter berikutnya menelusuri sejarah dan filosofi itu agar setiap aturan sintaks yang akan kita temui punya konteks yang jelas.