İçeriğe geç

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.

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
}

Gönderimi ayrı bir goroutine’e taşıyın veya kanalı tamponlu yapın.