Junior — Middle
Czy wysyłanie danych do kanału, który nie jest otwarty do odczytu i zapisu, jest dozwolone?
sobes.tech AI
Odpowiedź od AI
W Go nie można wysyłać danych do kanału, który nie jest otwarty do zapisu. Jeśli kanał jest zamknięty (zamknięcie za pomocą close(channel)), próba wysłania do niego spowoduje panikę (panic w czasie działania).
Jednak od zamkniętego kanału można odczytywać — wtedy odczyt zwróci wartość zerową typu kanału i flagę wskazującą, że kanał jest zamknięty.
Przykład:
ch := make(chan int)
close(ch)
// Odczyt z zamkniętego kanału jest bezpieczny
value, ok := <-ch // ok == false
// Wysłanie do zamkniętego kanału wywoła panikę
ch <- 1 // panic: send on closed channel
W związku z tym, dane można wysyłać tylko do otwartych kanałów.