Jika Anda pernah menulis kode PHP atau JavaScript, Anda terbiasa dengan alur yang sederhana: simpan file, muat ulang halaman, lihat hasilnya. Ada sebuah program penerjemah yang membaca kode Anda baris demi baris setiap kali program dijalankan. Cara ini nyaman saat menulis, tetapi menuntut penerjemah tersebut selalu terpasang di server, dan setiap baris harus diterjemahkan ulang setiap kali dieksekusi.

Golang adalah bahasa pemrograman yang mengambil jalan berbeda. Kode Anda dikompilasi lebih dulu menjadi satu file program yang siap dijalankan, tanpa penerjemah apa pun di server tujuan. Bahasa ini dibuat di Google dan kini menjadi tulang punggung layanan besar seperti Tokopedia dan Gojek, sekaligus bahasa di balik Docker dan Kubernetes.

Satu hal yang perlu diluruskan sejak awal: nama resmi bahasa ini sebenarnya Go, bukan Golang. Kita akan membahas asal-usul kebingungan itu sebentar lagi.

Kenapa Google Membuat Bahasa Baru

Pada 21 September 2007, tiga engineer Google mulai merancang bahasa ini di papan tulis: Robert Griesemer, Rob Pike, dan Ken Thompson. Dua nama terakhir bukan sembarang orang. Ken Thompson adalah salah satu pencipta Unix, sementara Rob Pike ikut merancang pengodean karakter UTF-8. Bahasa ini diumumkan ke publik pada 10 November 2009.

Alasan mereka membuatnya terdokumentasi dengan jelas di FAQ resmi Go. Saat itu, seorang developer di Google harus memilih dua dari tiga hal berikut, tidak pernah ketiganya sekaligus:

  1. Kompilasi yang cepat: perubahan kecil tidak memaksa Anda menunggu proses build berjalan lama.
  2. Eksekusi yang cepat: program berjalan efisien dan hemat sumber daya saat melayani pengguna.
  3. Kemudahan menulis kode: bahasa terasa ringkas dan tidak menuntut banyak persiapan.

Bahasa seperti Java dan C++ menguasai sisi server dan unggul di poin kedua, tetapi menuntut banyak pengulangan serta waktu build yang panjang. Bahasa dinamis nyaman ditulis, namun membayarnya di sisi performa. Ada pula masalah kedua yang lebih mendesak: prosesor multicore sudah menjadi hal biasa, sementara bahasa-bahasa itu menyediakan dukungan yang minim untuk menjalankan banyak pekerjaan sekaligus.

Go dirancang untuk mengambil ketiganya. Konsekuensinya, banyak fitur yang lazim di bahasa lain sengaja dibuang. Pemahaman ini penting karena hampir semua keputusan desain Go yang terasa aneh pada awalnya menjadi masuk akal begitu Anda tahu masalah apa yang sedang dijawab.

Go atau Golang, Mana yang Benar?

Ini pertanyaan yang wajar muncul, dan jawabannya cukup sederhana. Nama resmi bahasa ini adalah Go. Sebutan Golang berasal dari alamat situs resminya yang dulu memakai domain golang.org, karena pada 2009 domain berakhiran .dev belum tersedia.

Sebutan itu bertahan karena satu alasan praktis: kata "go" nyaris mustahil dicari di mesin pencari. Mengetik "go tutorial" akan memberi Anda hasil yang campur aduk, sedangkan "golang tutorial" langsung mengarah ke sasaran. Komunitas kemudian memakai tagar #golang dan istilah tersebut melekat sampai sekarang.

Jadi keduanya merujuk pada hal yang sama. Dokumen resmi memakai "Go", sedangkan lowongan kerja dan judul artikel lebih sering memakai "Golang".

Dari Kode Menjadi Satu File Binary

Go adalah bahasa yang statically typed (tipe data setiap variabel ditentukan dan diperiksa saat kompilasi, bukan saat program berjalan) dan dikompilasi langsung ke kode mesin. Tidak ada virtual machine (lapisan perantara yang menjalankan kode di atas sistem operasi) seperti yang dipakai Java.

Hasil kompilasinya adalah satu file binary tunggal yang sudah memuat semua yang dibutuhkan program, termasuk runtime Go sendiri. Karena itulah program "hello world" sederhana pun berukuran sekitar 2 MB. Ukuran ini terlihat besar untuk program sekecil itu, tetapi angkanya nyaris tidak bertambah seiring aplikasi Anda tumbuh.

Implikasi praktisnya besar sekali untuk urusan deployment (proses menempatkan aplikasi ke server). Anda tidak perlu memasang penerjemah, tidak perlu menyamakan nomor versi bahasa antara komputer Anda dan server, dan tidak perlu memasang puluhan pustaka pendukung di sana. Satu file disalin, lalu dijalankan.

Go juga mendukung cross-compilation (mengompilasi program untuk sistem operasi lain dari komputer Anda sendiri). Lewat variabel GOOS dan GOARCH, satu kode sumber yang sama bisa menghasilkan binary untuk beberapa sistem operasi sekaligus.

Diagram kompilasi Golang: satu kode sumber .go menghasilkan binary untuk Linux, Windows, dan macOS.Diagram kompilasi Golang: satu kode sumber .go menghasilkan binary untuk Linux, Windows, dan macOS.

Konsekuensinya, aplikasi Go umumnya membutuhkan server dengan akses penuh seperti VPS Indonesia, karena shared hosting pada umumnya hanya menyediakan lingkungan PHP dan tidak mengizinkan Anda menjalankan proses sendiri secara terus-menerus.

Satu komponen lagi yang perlu Anda kenali adalah garbage collector (mekanisme yang otomatis membebaskan memori yang sudah tidak dipakai program). Go mewajibkannya, sehingga Anda tidak perlu mengurus alokasi memori secara manual seperti di C. Harganya adalah jeda singkat saat pembersihan berjalan. Pada Go modern jeda ini sudah berada di bawah satu milidetik. Go 1.26 yang dirilis 10 Februari 2026 bahkan membawa garbage collector baru bernama Green Tea, yang menurunkan beban kerjanya 10 sampai 40 persen pada program yang banyak mengalokasikan memori.

Goroutine: Cara Go Menangani Ribuan Pekerjaan Sekaligus

Inilah bagian yang paling membedakan Go dari bahasa lain, sekaligus alasan teknis di balik pilihan banyak perusahaan besar.

Saat sebuah server melayani ribuan pengguna sekaligus, ia perlu menjalankan banyak pekerjaan bersamaan. Cara klasiknya adalah membuat thread (jalur eksekusi terpisah yang dikelola sistem operasi) untuk tiap pekerjaan. Masalahnya, sebuah thread sistem operasi mengalokasikan ruang memori sekitar 1 sampai 8 MB di muka, dan pergantian antar-thread ditangani kernel sehingga tidak murah. Menjalankan sepuluh ribu thread sekaligus akan menghabiskan memori sebelum aplikasi Anda melayani siapa pun.

Go menjawabnya dengan goroutine, yaitu fungsi yang berjalan bersamaan dengan fungsi lain dan dijadwalkan oleh runtime Go, bukan oleh sistem operasi. Sebuah goroutine memulai hidupnya dengan ruang memori hanya 2 KB, lalu tumbuh dan menyusut sesuai kebutuhan. Sejumlah goroutine dipetakan ke sejumlah kecil thread sistem operasi, sehingga menjalankan ratusan ribu goroutine dalam satu proses adalah hal yang wajar.

Membuatnya pun hanya menambah satu kata kunci di depan pemanggilan fungsi:

GO
go kirimEmail(pengguna)

Baris di atas menjalankan kirimEmail di latar belakang, dan program langsung melanjutkan ke baris berikutnya tanpa menunggu.

Untuk berkomunikasi antar-goroutine, Go menyediakan channel (saluran tempat satu goroutine mengirim nilai dan goroutine lain menerimanya). Channel juga berfungsi sebagai alat sinkronisasi: pada channel tanpa buffer, pengirim akan menunggu sampai ada yang menerima, dan penerima menunggu sampai ada data.

GO
hasil := make(chan string)

go func() {
    hasil <- "selesai"
}()

fmt.Println(<-hasil)

Pendekatan ini berakar pada model CSP (Communicating Sequential Processes) dan dirangkum oleh satu kalimat yang sering dikutip dari dokumentasi resmi Go: jangan berkomunikasi dengan berbagi memori, melainkan berbagilah memori dengan cara berkomunikasi. Artinya, alih-alih beberapa pekerjaan mengakses satu variabel bersama dan saling menimpa, data dioper lewat channel sehingga hanya satu pihak yang memegangnya pada satu waktu.

Perbandingan Golang: tiga blok besar thread sistem operasi berbanding puluhan blok kecil goroutine.Perbandingan Golang: tiga blok besar thread sistem operasi berbanding puluhan blok kecil goroutine.

Ciri Khas Sintaks Go yang Perlu Anda Kenali

Program Go paling sederhana terlihat seperti ini:

GO
package main

import "fmt"

func main() {
    fmt.Println("Halo, Indonesia")
}

Setiap file Go dimulai dengan deklarasi paket, dan program yang bisa dijalankan selalu memiliki fungsi main. Jika Anda datang dari PHP atau JavaScript, ada beberapa hal yang akan terasa asing sejak hari pertama.

  1. Error dikembalikan sebagai nilai biasa: Go tidak memiliki mekanisme exception dengan blok try-catch. Fungsi yang bisa gagal mengembalikan dua nilai sekaligus, dan Anda memeriksanya secara eksplisit.
GO
data, err := os.ReadFile("konfigurasi.json")
if err != nil {
    return err
}

Pola if err != nil ini akan Anda tulis berkali-kali. Terasa bertele-tele pada awalnya, namun membuat setiap kemungkinan kegagalan terlihat jelas di kode, bukan tersembunyi di suatu tempat.

  1. Tidak ada class dan pewarisan: Go memakai struct untuk mengelompokkan data dan menempelkan fungsi padanya. Tidak ada hierarki tipe seperti di Java.

  2. Interface dipenuhi secara implisit: sebuah tipe tidak perlu menyatakan bahwa ia mengimplementasikan sesuatu. Selama ia memiliki method yang diminta, ia otomatis memenuhi interface tersebut.

  3. Huruf besar menentukan visibilitas: nama yang diawali huruf kapital dapat diakses dari paket lain, sedangkan yang diawali huruf kecil bersifat privat. Tidak ada kata kunci public atau private.

  4. Format kode diseragamkan gofmt: Go menyertakan alat yang merapikan kode ke satu gaya baku. Perdebatan soal spasi dan posisi kurung praktis tidak ada di komunitas Go.

Dua hal yang sering ditanyakan pendatang baru soal kelengkapan bahasa ini sudah terjawab. Generics (kemampuan menulis satu fungsi yang bekerja untuk berbagai tipe data) masuk di Go 1.18 pada 2022, memakai kurung siku seperti [T any]. Sementara pengelolaan pustaka pihak ketiga ditangani Go modules lewat file go.mod, yang diperkenalkan di Go 1.11 dan matang untuk produksi sejak Go 1.14.

Alasan Perusahaan Memilih Go

Tokopedia adalah contoh yang menarik karena mereka tidak memulai dengan Go. Sistem mereka awalnya dibangun dengan Perl, lalu mulai bermigrasi ke Go sekitar 2015 seiring beban transaksi yang terus naik. Bagian yang dipindahkan lebih dulu adalah layanan yang paling sering dipanggil, seperti pencarian produk dan alur transaksi.

Gojek menempuh jalur serupa untuk arsitektur microservice mereka, yaitu aplikasi besar yang dipecah menjadi banyak layanan kecil yang berdiri sendiri. Ketika satu layanan bermasalah, layanan lain tetap berjalan. Karakter Go cocok untuk pola ini karena tiap layanan menjadi satu binary ringan yang mudah diperbanyak saat trafik melonjak, dan goroutine membuat satu instance mampu menahan banyak permintaan sekaligus. Ruangguru, Bukalapak, dan Halodoc juga memakai Go untuk membangun API dan layanan internal mereka.

Di luar aplikasi, ada pola yang lebih menarik lagi. Perkakas yang menopang infrastruktur modern sebagian besar ditulis dengan Go: Docker, Kubernetes, Terraform, dan Prometheus. Alasannya sama dengan alasan Google membuat Go. Perkakas semacam ini harus didistribusikan sebagai satu file yang bisa dijalankan siapa pun tanpa persiapan, harus cepat, dan harus menangani banyak koneksi sekaligus.

Popularitasnya mengikuti. Pada Juli 2025, Go mencapai posisi tertinggi sepanjang sejarahnya di indeks TIOBE, yaitu peringkat 7, naik jauh dari peringkat 122 pada Mei 2015.

Kelemahan dan Pertimbangan Sebelum Memakai Go

Tidak ada bahasa yang unggul di semua sisi, dan Go membayar kesederhanaannya dengan beberapa hal berikut.

  1. Kode penanganan error terasa berulang: pola if err != nil muncul di mana-mana. Pada fungsi yang memanggil lima operasi berisiko, Anda akan menulis lima blok pemeriksaan serupa. Ini keluhan paling umum dari pengguna Go, termasuk yang sudah lama memakainya.

  2. Garbage collector membuatnya kurang cocok untuk sistem waktu nyata yang ketat: jeda pembersihan memori memang sangat singkat, tetapi tetap ada dan waktunya tidak dapat diprediksi sepenuhnya. Untuk perangkat medis, kendali industri, atau sistem yang menuntut jaminan waktu respons yang pasti, C, C++, atau Rust lebih tepat.

  3. Ekosistem tipis di beberapa bidang: Go sangat kuat di layanan jaringan dan perkakas baris perintah. Namun pilihan pustaka untuk analisa data, aplikasi desktop, dan aplikasi mobile native masih jauh tertinggal dibanding Python, Java, atau Swift.

  4. Generics datang terlambat: karena baru hadir di 2022, banyak pustaka lama masih memakai interface{} sebagai jalan pintas untuk menerima tipe apa pun. Anda akan menemukan gaya kode lama ini cukup sering.

  5. Kode cenderung lebih panjang: Go sengaja tidak menyediakan banyak fitur yang mempersingkat penulisan, sehingga hasilnya lebih bertele-tele dibanding Python meski lebih mudah dibaca di kemudian hari.

Kapan Go Tepat dan Kapan Bahasa Lain Lebih Masuk Akal

Berikut panduan yang bisa langsung Anda pakai untuk memutuskan.

Go adalah pilihan yang tepat untuk membangun API dan layanan backend, memecah aplikasi menjadi microservice, serta membuat perkakas baris perintah yang perlu dibagikan sebagai satu file. Go juga unggul untuk layanan jaringan seperti proxy dan untuk pekerjaan latar belakang dalam jumlah besar.

Bahasa lain lebih masuk akal dalam beberapa keadaan. Untuk analisa data dan machine learning, Python memiliki ekosistem yang belum tertandingi. Untuk tampilan yang berjalan di browser, JavaScript adalah satu-satunya pilihan yang berjalan native di sana. Untuk website berbasis CMS seperti WordPress atau proyek kecil dengan tenggat pendek, PHP jauh lebih cepat menghasilkan sesuatu yang siap tayang. Untuk aplikasi mobile native, Kotlin dan Swift adalah jalur resmi masing-masing platform.

Satu catatan praktis: jika proyek Anda hanya sebuah situs profil perusahaan atau blog, memilih Go akan menyulitkan diri sendiri tanpa manfaat yang sepadan.

Diagram dua panel: pekerjaan yang cocok dikerjakan dengan Go dan yang lebih baik memakai bahasa lain.Diagram dua panel: pekerjaan yang cocok dikerjakan dengan Go dan yang lebih baik memakai bahasa lain.

Langkah Awal Belajar Golang

Jika Anda memutuskan mencobanya, urutan berikut cukup masuk akal untuk diikuti. Anda tidak perlu memasang apa pun untuk dua langkah pertama.

Langkah #1: Kerjakan A Tour of Go

Situs resmi go.dev menyediakan tur interaktif yang berjalan di browser. Ini cara tercepat mengenal sintaks dasar, goroutine, dan channel tanpa memasang apa pun. Alokasikan sekitar 4 sampai 6 jam untuk menyelesaikannya.

Langkah #2: Bereksperimen di Go Playground

Go Playground memungkinkan Anda menulis dan menjalankan kode langsung di browser, lalu membagikan tautannya. Cocok untuk mencoba potongan kode kecil sebelum memasang Go di komputer.

Langkah #3: Pasang Go dan buat modul pertama

Setelah terbiasa, unduh Go dari situs resminya lalu buat proyek pertama Anda:

Bash
mkdir proyek-pertama && cd proyek-pertama
go mod init contoh/proyek-pertama
go run .

Perintah go mod init membuat file go.mod yang mencatat nama modul dan daftar pustaka yang Anda pakai.

Langkah #4: Bangun satu API kecil

Cara belajar paling efektif adalah menyelesaikan sesuatu yang utuh. Buatlah API sederhana dengan beberapa endpoint yang menyimpan data ke basis data. Standard library Go sudah menyediakan HTTP server yang memadai, jadi Anda belum membutuhkan apa pun di luar itu.

Setelah proyek Anda membesar, barulah pertimbangkan framework seperti Gin, Echo, atau Fiber yang menyediakan routing dan middleware siap pakai. Bagi yang benar-benar baru mengenal dunia ini, memahami dasar coding lebih dulu akan sangat membantu sebelum masuk ke Go.

Pertanyaan yang Sering Diajukan Seputar Golang

Apakah Golang sulit dipelajari untuk pemula? Go termasuk yang paling mudah di antara bahasa terkompilasi karena fiturnya sedikit. Seseorang yang sudah menguasai satu bahasa lain umumnya bisa membaca kode Go dalam hitungan hari. Yang membutuhkan waktu lebih lama adalah membiasakan diri dengan pola penanganan error dan cara berpikir dengan goroutine.

Apakah Golang bisa dipakai membuat website? Bisa, terutama untuk sisi backend dan API. Untuk tampilan yang dilihat pengunjung, Go biasanya dipasangkan dengan JavaScript di sisi browser. Membuat situs konten biasa dengan Go tetap memungkinkan, hanya saja CMS yang sudah matang jauh lebih hemat waktu.

Apakah Golang bisa berjalan di shared hosting? Umumnya tidak. Aplikasi Go berjalan sebagai proses tersendiri yang hidup terus-menerus, sementara shared hosting dirancang untuk PHP dan tidak mengizinkan pola tersebut.

Berapa lama belajar Golang sampai bisa membuat API? Dengan latihan rutin satu sampai dua jam per hari, sebagian besar orang yang sudah punya dasar pemrograman dapat membangun API sederhana dalam 4 sampai 6 minggu.

Apakah Golang akan menggantikan PHP atau Node.js? Tidak. PHP tetap dominan untuk website berbasis CMS, Node.js unggul ketika satu tim ingin memakai satu bahasa di sisi browser dan server, sedangkan Go dipilih ketika kebutuhan utamanya adalah efisiensi sumber daya dan konkurensi.

Kesimpulan

Golang adalah bahasa pemrograman terkompilasi buatan Google yang lahir dari kebutuhan yang sangat spesifik: mendapatkan kompilasi cepat, eksekusi efisien, dan kemudahan menulis kode sekaligus. Untuk mencapainya, Go menukar banyak fitur dengan kesederhanaan, lalu menambahkan goroutine yang membuat penanganan ribuan pekerjaan bersamaan menjadi murah.

Go tepat Anda pilih ketika membangun API, microservice, layanan jaringan, atau perkakas baris perintah. Sebaliknya, untuk analisa data, tampilan di browser, aplikasi mobile native, atau website berbasis CMS, bahasa lain akan membawa Anda ke tujuan lebih cepat.

Semoga artikel ini membantu.