Sobes.tech
Junior — Middle

Jak często należy zamykać kanał w Go, aby uniknąć błędów?

sobes.tech AI

Odpowiedź od AI

W Go, kanał musi być zamknięty dokładnie raz, gdy nie planujesz już wysyłać do niego danych. Zamknięcie kanału wielokrotnie spowoduje panikę (runtime panic).

Ważne:

  • Ten, kto pisze do kanału, powinien go zamknąć, a nie ten, kto czyta.
  • Jeśli kanał jest używany do przesyłania danych między gorutynami, zamknięcie sygnalizuje, że nie będzie już więcej danych.

Przykład:

ch := make(chan int)
func() {
    defer close(ch) // zamykamy kanał raz
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

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

W tym przykładzie kanał jest zamykany raz po wysłaniu wszystkich wartości.