Sobes.tech
Senior

Co się dzieje podczas odczytu i zapisu w zamkniętym kanale?

sobes.tech AI

Odpowiedź od AI

W Go, podczas pracy z kanałami:

  • Odczyt z zamkniętego kanału: Jeśli kanał jest zamknięty i nie ma w nim danych, operacja odczytu zwraca wartość domyślną typu kanału i false w drugim zwracanym argumencie (jeśli jest używany), co sygnalizuje zamknięcie kanału.

  • Zapis do zamkniętego kanału: Próba zapisania do zamkniętego kanału powoduje panic (panic). Jest to błąd wykonania.

Przykład:

ch := make(chan int)
close(ch)

// Odczyt
v, ok := <-ch // ok == false, v == 0

// Zapis
ch <- 1 // panic: send on closed channel

W związku z tym, można bezpiecznie odczytywać z zamkniętego kanału, dopóki są w nim dane, ale nie można do niego pisać.