Sobes.tech
Middle+

Kdo by měl zavřít kanál - spisovatel nebo čtenář?

sobes.tech AI

Odpověď od AI

V jazyce Go by měl kanál uzavřít odesílatel (sender), nikoli příjemce (receiver). Uzavření kanálu signalizuje, že již nebudou odesílány žádné hodnoty, a čtenáři mohou správně ukončit čtení tím, že zjistí, že kanál je uzavřen.

Pokud čtenář kanál uzavře a odesílatel bude pokračovat v pokusech o odeslání, dojde k panice (panic). Proto je odpovědnost za uzavření kanálu na straně, která jej píše.

Příklad:

ch := make(chan int)
func() {
    defer close(ch) // odesílatel uzavře kanál
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

for val := range ch {
    fmt.Println(val) // čte do uzavření
}