Sobes.tech
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
}