Sobes.tech
Junior — Middle

Колко пъти трябва да затворите канал в Go, за да избегнете грешки?

sobes.tech AI

Отговор от AI

В Go е необходимо каналът да бъде затворен точно веднъж, когато вече не се планира изпращане на данни към него. Затварянето на канала няколко пъти ще доведе до паника (runtime panic).

Важно:

  • Този, който пише в канала, трябва да го затвори, а не този, който чете.
  • Ако каналът се използва за пренос на данни между горутините, затварянето му сигнализира, че повече данни няма да има.

Пример:

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

for val := range ch {
    fmt.Println(val)
}

В този пример каналът се затваря веднъж след изпращането на всички стойности.