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
falsew 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ć.