Modul 0 · Dasar Go

Materi 1 · Modul 0

Kenalan sama Go

Bahasa yang sengaja dibuat kecil. Fiturnya sedikit, dan itu justru alasan orang memilihnya.

Tiga hal yang membuat Go berbeda

Dikompilasi jadi satu binary. Hasil go build adalah satu file yang bisa dijalankan tanpa runtime apa pun. Tidak ada PHP-FPM, tidak ada node_modules, tidak ada interpreter yang harus terpasang di server. Kirim satu file, jalankan, selesai.

Bertipe statis dan dikompilasi cepat. Kesalahan tipe ketangkap sebelum program jalan, tapi compile-nya hitungan detik — bukan menit seperti bahasa bertipe statis lainnya.

Concurrency jadi bagian bahasa. Menjalankan ribuan pekerjaan bersamaan cuma butuh kata kunci go. Ini bukan library tambahan, tapi bawaan bahasanya, dan inilah alasan utama orang memilih Go untuk pekerjaan tertentu.

Coba sendiri: kenapa concurrency penting

Bayangkan memanggil tiga API yang masing-masing butuh 1 detik. Klik dua tombol di bawah dan bandingkan.

demo · berurutan vs goroutine

pilih salah satu di atas…

bedanya di kode
// berurutan — 3 detik
a := ambilUser()
b := ambilPesanan()
c := ambilProduk()

// concurrent — 1 detik
var wg sync.WaitGroup
wg.Add(3)

go func() { defer wg.Done(); a = ambilUser() }()
go func() { defer wg.Done(); b = ambilPesanan() }()
go func() { defer wg.Done(); c = ambilProduk() }()

wg.Wait()   // tunggu ketiganya selesai

Goroutine bukan thread

Satu thread sistem operasi memakan sekitar 1 MB memori. Satu goroutine mulai dari sekitar 2 KB, dan Go sendiri yang mengatur pemetaan ribuan goroutine ke beberapa thread. Karena itu menjalankan 100.000 goroutine adalah hal yang wajar di Go, sementara 100.000 thread akan membuat servermu tumbang.

Catatan — Ini yang membedakan Go dari Node dalam hal concurrency. Node menangani banyak koneksi dengan satu thread dan event loop, jadi satu perhitungan berat membekukan semuanya. Go menjalankan goroutine di beberapa core sungguhan, jadi pekerjaan berat di satu goroutine tidak memblokir yang lain. Untuk kerja yang menunggu I/O keduanya setara; untuk kerja yang membebani CPU, Go jauh lebih baik.

Yang tidak ada di Go, dan itu disengaja

Tidak adaGantinya
Class dan pewarisanStruct + interface + komposisi
Exception / try-catchError sebagai nilai yang dikembalikan
Nilai default parameterStruct opsi, atau beberapa fungsi
Operator overloading, macroTidak ada — kode selalu berarti apa yang tertulis
Framework web resminet/http di pustaka standar sudah memadai

Daftar itu terasa seperti kekurangan di awal. Efek praktisnya: kode Go orang lain hampir selalu bisa kamu baca, karena tidak banyak cara berbeda untuk menulis hal yang sama. Tidak ada lapisan abstraksi pintar yang harus dipelajari dulu sebelum paham apa yang terjadi.

Harga yang kamu bayar

Jujur di awal supaya tidak kaget:

  • Kodenya lebih panjang. Fitur yang di framework-framework populer bisa selesai dalam 20 baris sering butuh 60 baris di Go, karena penanganan error ditulis eksplisit di setiap langkah.
  • Tidak ada ORM kaya fitur atau admin panel bawaan. Banyak framework web modern menyediakan alat otomatis untuk berbicara dengan database dan membuat halaman admin secara instan. Go tidak menyediakan itu — kamu menulis SQL sendiri dan membangun panel adminnya sendiri kalau perlu.
  • Harus VPS. Go tidak bisa jalan di shared hosting atau cPanel biasa.
  • Library lokal lebih tipis. Integrasi Midtrans, Fonnte, dan sejenisnya biasanya harus kamu panggil lewat HTTP sendiri.

Materi 31 membahas kapan harga itu layak dibayar dan kapan tidak, dengan lebih rinci.