Sobes.tech
Middle+

Кой трябва да затвори канала - писателят или читателят?

sobes.tech AI

Отговор от AI

В Go, каналът трябва да бъде затворен от изпращача (sender), а не от получателя (receiver). Затварянето на канала сигнализира, че повече стойности няма да бъдат изпратени, и читателите могат правилно да приключат четенето, като открият, че каналът е затворен.

Ако читателят затвори канала и изпращачът продължи да опитва да изпрати, това ще доведе до паника (panic). Затова отговорността за затваряне на канала е на страната, която го пише.

Пример:

ch := make(chan int)
func() {
    defer close(ch) // изпращачът затваря канала
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

for val := range ch {
    fmt.Println(val) // чете до затварянето
}