Apa itu Go? — Go

Pernah dengar Docker? Kubernetes? Terraform? Caddy? Hugo? Tools yang jadi backbone DevOps modern. Mereka punya satu kesamaan: ditulis dalam **Go**. Bahasa…

Go adalah bahasa pemrograman buatan Google (diumumkan 2009) yang di-compile: kode yang kamu tulis di file .go dicek dulu sampai tuntas oleh program bernama compiler, lalu diubah jadi satu file program siap jalan. Bayangin dapur pusat Warung Bakso Mas Bimo. Resepnya dicek baris demi baris dulu, dan kalau ada bahan yang dibeli tapi gak dipakai, resepnya ditolak. Kalau lolos, dapur mengemas bakso beku dalam satu bungkus. Cabang mana pun tinggal memanaskan bungkus itu, gak perlu dapur atau resepnya. Resep itu file .go, dapurnya compiler, bungkusnya file program (binary).

🧪 Tebakan cepat: di bakso.go ada baris total := 15000 * 3 yang hasilnya gak pernah dipakai. Waktu go run bakso.go dijalankan, apa yang terjadi: dua baris di atasnya tetap tercetak, atau gak ada satu baris pun yang jalan? Tebak dulu, jawabannya ada di bagian "Compiler yang galak".

Program Go pertamamu

Sepanjang track Go ini kita membangun satu program yang terus tumbuh: kasir Warung Bakso Mas Bimo. Menunya bakso urat Rp15.000, mie ayam Rp12.000, dan es teh Rp5.000. Semua harga disimpan sebagai angka bulat rupiah.

package main

import "fmt"

func main() {
	fmt.Println("Warung Bakso Mas Bimo")
	fmt.Println("Bakso urat", 15000)
	fmt.Println(15000 * 3) // 3 porsi
}

Simpan sebagai bakso.go, lalu jalankan di terminal:

$ go run bakso.go
Warung Bakso Mas Bimo
Bakso urat 15000
45000

Di komputermu sendiri, pasang Go dari go.dev/dl, lalu cek dengan go version. Hasilnya mirip go version go1.25.1 linux/amd64 (angka dan sistemnya bisa beda). Di latihan BelajarWeb.dev, tombol Jalankan memakai simulator Go di browser, jadi kamu belum perlu meng-install apa pun.

Compiled: dicek dulu, jadi satu file program

Ada dua perintah untuk menjalankan kode Go:

$ go build bakso.go
$ ls
bakso  bakso.go
$ ./bakso
Warung Bakso Mas Bimo
Bakso urat 15000
45000

go build yang berhasil gak mencetak apa-apa. File bakso itu binary: kode mesin yang langsung dijalankan prosesor, ukurannya sekitar 2 MB, dan isinya sudah lengkap. Server yang menjalankannya gak perlu meng-install Go. Ini beda dengan Python atau JavaScript, yang butuh interpreter di komputer tujuan.

Di dalam binary itu ikut juga runtime Go, termasuk garbage collector: bagian yang otomatis membuang data di memori yang sudah gak dipakai, jadi kamu gak perlu membebaskan memori sendiri. Go juga statically typed: tipe tiap nilai (angka, teks, dan seterusnya) dicek waktu compile, bukan waktu program sudah jalan.

Compiler yang galak

Compiler Go menolak kode yang punya variabel atau import nganggur. Ini kode tebakan tadi:

package main

import "fmt"

func main() {
	fmt.Println("Warung Bakso Mas Bimo")
	fmt.Println("Bakso urat", 15000)
	total := 15000 * 3 // 3 porsi
}
$ go run bakso.go
# command-line-arguments
./bakso.go:8:2: declared and not used: total

Import yang gak dipakai juga ditolak. Tambah "os" ke import tanpa memakainya, dan hasilnya ./bakso.go:5:2: "os" imported and not used. Hapus import-nya, atau pakai. Kalau func main gak ada, misalnya kamu menamainya func mulai, error-nya function main is undeclared in the main package.

Goroutine: banyak kerjaan sekaligus

Alasan besar Go disukai di backend adalah goroutine: fungsi yang jalan bersamaan dengan fungsi lain, cukup dengan menulis go di depan pemanggilannya. Goroutine diatur oleh runtime Go, bukan oleh sistem operasi. Satu goroutine mulai dengan memori stack sekitar 2 KB, sementara thread sistem operasi biasanya butuh hitungan MB. Karena ringan, satu server Go bisa menjalankan ribuan goroutine sekaligus, misalnya satu goroutine untuk tiap pesanan yang masuk. Detailnya ada di pelajaran goroutine nanti.

🎯 Go dipakai buat apa

Go sengaja dibuat sederhana: cuma 25 keyword (kata yang dicadangkan bahasa, seperti func dan package). Go kurang cocok untuk tampilan frontend di browser atau aplikasi mobile native.

⚠️ Jebakan yang sering ketemu

TL;DR: Go adalah bahasa compiled dari Google. Compiler mengecek seluruh kode dulu, lalu membuat satu file binary yang jalan tanpa perlu Go terpasang. go run bakso.go compile lalu langsung jalan, go build bakso.go membuat file bakso yang dijalankan dengan ./bakso. Program wajib punya package main, import untuk package yang dipakai, dan func main() sebagai titik mulai. fmt.Println mencetak satu baris. Variabel atau import yang gak dipakai bikin compile gagal (declared and not used, imported and not used), dan saat compile gagal gak ada satu baris pun yang jalan. Go punya garbage collector, statically typed, dan goroutine-nya ringan (mulai dari sekitar 2 KB), jadi ribuan bisa jalan bersamaan.

Yang akan kamu pelajari