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.