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í
}