Mencegah Kebocoran Goroutine (Goroutine Leak)
Aturan utama konkurensi di Go: Jangan pernah meluncurkan goroutine tanpa mengetahui kapan dan bagaimana ia akan berhenti.
pkg/net/query_timeout.go
func queryWithTimeout(ctx context.Context, target string) (string, error) {
ch := make(chan string, 1) // Buffer 1 agar sender tidak terblokir jika timeout terjadi
go func() {
res := performNetworkIO(target)
ch <- res
}()
select {
case res := <-ch:
return res, nil
case <-ctx.Done():
return "", ctx.Err()
}
}Catatan rekayasa pribadi dari pengoperasian sistem produksi. Pola dan tolok ukur diperbarui seiring perkembangan runtime.