Middle+
Kurš ir jāaizver kanāls - rakstnieks vai lasītājs?
sobes.tech AI
Atbilde no AI
Go valodā kanālam jābūt slēgtam sūtītājam (sender), nevis saņēmējam (receiver). Kanāla slēgšana signalizē, ka vairs netiks sūtītas vērtības, un lasītāji var pareizi pārtraukt lasīšanu, atklājot, ka kanāls ir slēgts.
Ja lasītājs slēdz kanālu, un sūtītājs turpina mēģināt sūtīt, tas izraisīs paniku (panic). Tādēļ atbildība par kanāla slēgšanu ir tās puses, kura to raksta.
Piemērs:
ch := make(chan int)
func() {
defer close(ch) // sūtītājs slēdz kanālu
for i := 0; i < 5; i++ {
ch <- i
}
}()
for val := range ch {
fmt.Println(val) // lasa līdz slēgšanai
}