Tamponsuz Kanal Kilitlenmesi (ARCH5035)
Anahtar go.async.channel-deadlock · Önem warning · Kategori async
Tamponsuz bir kanala eş zamanlı bir alıcı olmadan gönderim yapmak (veya gönderici olmadan alım) goroutine’i kalıcı olarak kilitler. Bu desen tüm programı çökerten bir deadlock’a yol açabilir.
Hatalı
Bölüm başlığı “Hatalı”func Compute() int { ch := make(chan int) ch <- 42 // alıcı yok, kalıcı olarak bloke olur return <-ch}func Compute() int { ch := make(chan int) go func() { ch <- 42 // ayrı goroutine'de gönderilir }() return <-ch}Düzeltme
Bölüm başlığı “Düzeltme”Gönderimi ayrı bir goroutine’e taşıyın veya kanalı tamponlu yapın.