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