Goroutine & Channel Dasar di Go
Penjelasan
Goroutine adalah fitur paling khas Go: fungsi yang dijalankan secara konkuren ("bersamaan") dengan fungsi lain, cukup dengan menambahkan keyword go di depan pemanggilan fungsi — jauh lebih ringan dibanding thread tradisional. Channel dipakai untuk mengirim data dengan aman ANTAR goroutine, mencegah race condition tanpa perlu lock manual.
Contoh Konsep
package main
import "fmt"
func kirimPesan(ch chan string) {
ch <- "Halo dari goroutine!" // kirim data ke channel
}
func main() {
ch := make(chan string)
go kirimPesan(ch) // jalankan sebagai goroutine terpisah
pesan := <-ch // terima data dari channel (menunggu sampai ada data)
fmt.Println(pesan)
}
Praktikum
Buat channel bertipe int. Buat goroutine yang mengirim angka 42 ke channel itu. Di main(), terima nilai dari channel dan tampilkan lewat fmt.Println.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Menerima data dari channel kosong (<-ch) akan MENUNGGU (blocking) sampai ada data dikirim ke channel itu — kalau tidak ada goroutine lain yang pernah mengirim, program akan macet selamanya (deadlock). Materi ini baru pengenalan; concurrency Go punya banyak pola lanjutan (buffered channel, select, sync.WaitGroup) yang bisa dipelajari setelah paham dasar ini.