Junior — Middle
W którym miejscu w kodzie należy zamknąć kanał?
sobes.tech AI
Odpowiedź od AI
W Go, kanał powinien być zamknięty w miejscu, w którym jest tworzony i gdzie nie planuje się już wysyłać danych. Zazwyczaj robi to nadawca, aby sygnalizować odbiorcom, że nie będzie więcej danych.
Ważne:
- Odbiorcy mogą sprawdzać zamknięcie kanału podczas odczytu.
- Kanał powinien być zamknięty tylko przez nadawcę, aby uniknąć paniki.
Przykład:
ch := make(chan int)
func() {
defer close(ch) // zamykamy kanał po wysłaniu wszystkich danych
for i := 0; i < 5; i++ {
ch <- i
}
}()
for val := range ch {
fmt.Println(val) // odbieramy dane, aż kanał się zamknie
}