Middle
Kā izraisīt paniku, strādājot ar kanālu? Kas notiek ar operācijām ar nil-kanālu un slēgtu kanālu?
sobes.tech AI
Atbilde no AI
Go valodā, darbojoties ar kanāliem, panika rodas šādos gadījumos:
- Sūtot vērtību aizvērta kanāla (
chan <- value) gadījumā rodas panika. - Aizverot jau aizvērtu kanālu (
close(chan)) rodas panika.
Attiecībā uz nil-kanāliem:
- Darbības sūtīt un saņemt ar nil-kanālu tiek bloķētas uz mūžīgiem laikiem (deadlock), bet nesagādā paniku.
Piemērs:
var ch chan int // nil-kanāls
// <-ch // tiek bloķēts uz mūžīgiem laikiem
// ch <- 1 // tiek bloķēts uz mūžīgiem laikiem
ch = make(chan int)
close(ch)
// ch <- 1 // panika: sūtīt uz aizvērtu kanālu
close(ch) // panika: jau aizvērta kanāla aizvēršana