Sobes.tech
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
}