Recover'sız Goroutine (ARCH5169)
Anahtar go.logging.goroutine-no-recover · Önem info · Kategori logging
Bir goroutine içinde oluşan panic, kurtarılıp loglanmazsa tüm programı çökertir ve hata sessizce kaybolur. Fire-and-forget goroutine’lerde hatalar yakalanıp loglanmalı veya bir kanalla geri iletilmelidir.
Hatalı
Bölüm başlığı “Hatalı”func dispatch(jobs []Job) { for _, j := range jobs { go func(j Job) { handle(j) // panic ederse program çöker }(j) }}func dispatch(log *slog.Logger, jobs []Job) { for _, j := range jobs { go func(j Job) { defer func() { if r := recover(); r != nil { log.Error("job panicked", "id", j.ID, "panic", r) } }() handle(j) }(j) }}Düzeltme
Bölüm başlığı “Düzeltme”Her goroutine’in başına recover içeren bir defer ekleyip panic’i loglayın veya geri iletin.