Sobes.tech
Junior — Middle

В кое място в кода трябва да затворите канала?

sobes.tech AI

Отговор от AI

В Go каналът трябва да бъде затворен там, където е създаден и където вече не се планира изпращане на данни. Обикновено това прави изпращачът, за да сигнализира на получателите, че повече данни няма да има.

Важно:

  • Получателите могат да проверяват затварянето на канала при четене.
  • Само изпращачът трябва да затваря канала, за да избегне паника.

Пример:

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

for val := range ch {
    fmt.Println(val) // получаваме данни, докато каналът не се затвори
}