Sobes.tech
Junior — Middle

Czym różni się otrzymanie wartości zerowej z zamkniętego kanału od otrzymania takiej samej wartości przy samodzielnym tworzeniu kanału i wysyłaniu danych?

sobes.tech AI

Odpowiedź od AI

W Go, podczas odczytu z kanału, jeśli kanał jest zamknięty i nie ma więcej danych, operacja odczytu zwraca wartość zerową typu kanału i false w drugiej wartości zwracanej (jeśli używasz składni v, ok := <-ch). Sygnałizuje to, że kanał jest zamknięty i nie będzie więcej danych.

Jeśli jednak utworzysz kanał, wyślesz do niego wartość zerową i odczytasz ją, operacja odczytu zwróci tę wartość zerową, ale ok będzie true, ponieważ kanał jest otwarty i dane zostały odebrane.

Podsumowanie:

  • Zamknięty kanał bez danych: odczyt zwraca wartość zerową + ok == false.
  • Otwartym kanał z wartością zerową: odczyt zwraca wartość zerową + ok == true.

To pozwala odróżnić rzeczywistą wartość zerową od sygnału zamknięcia kanału.