Goroutine
Jalankan fungsi sebagai tugas ringan yang berjalan bersamaan.
Pahami konsepnya
Tambahkan kata go sebelum pemanggilan fungsi dan ia berjalan sebagai goroutine — tugas ringan yang dijadwalkan runtime Go untuk berjalan bersamaan. Memulai goroutine semurah memanggil fungsi biasa; ribuan bahkan jutaan dalam satu program masih wajar. Runtime menaruhnya di sejumlah kecil thread OS dan mengatur pergantianya secara otomatis.
Goroutine membuat pemanggilan TIDAK menunggu: baris berikutnya langsung jalan meski tugasnya belum selesai. Di contoh pertama, time.Sleep dipakai hanya demi demo — menahan main supaya program tidak berhenti sebelum goroutine mencetak. Solusi yang benar menunggu lewat channel (pelajaran berikutnya) atau WaitGroup.
Fungsi main sendiri adalah goroutine utama; saat ia selesai, seluruh program berhenti seketika — goroutine lain yang masih berjalan ikut dimatikan. Kesadaran akan ini adalah kunci mengapa pola sinkronisasi sangat penting di Go.
Coba contoh kode
package main
import (
"fmt"
"time"
)
func tugas(nama string) {
fmt.Println("mulai", nama)
time.Sleep(500 * time.Millisecond)
fmt.Println("selesai", nama)
}
func main() {
go tugas("A") // tidak menunggu
go tugas("B")
time.Sleep(1 * time.Second) // demo saja: beri waktu goroutine
fmt.Println("main selesai")
}Kedua pemanggilan go tugas berjalan hampir bersamaan — "mulai A" dan "mulai B" tercetak berdampingan sebelum keduanya "selesai". Tanpa time.Sleep di akhir main, program akan langsung berhenti dan output goroutine mungkin tidak pernah muncul. Sleep di sini hanya alat peraga; pelajaran channel dan WaitGroup menggantinya dengan sinkronisasi sungguhan.
Banyak goroutine sekaligus
func main() {
for i := 1; i <= 5; i++ {
go func(n int) {
fmt.Println("tugas", n)
}(i)
}
time.Sleep(300 * time.Millisecond)
}Lima goroutine diluncurkan dalam sekejap dan mencetak dalam urutan yang tidak pasti. Perhatikan i dikirim sebagai parameter n — menangkap i langsung dari closure akan terkena jebakan variabel loop yang berubah; menyalinnya lewat parameter membuat tiap goroutine memegang nilainya sendiri.
Latihan singkat
Uji: tiga goroutine (jeda 100/300/500 ms) masing-masing mencetak `selesai` + namanya SETELAH tidurnya — harus tercetak `selesai A`, `selesai B`, `selesai C` berurutan.