Sobes.tech
Senior

Šta se dešava pri čitanju iz zatvorenog kanala u Go?

sobes.tech АИ

Одговор од АИ

Kada čitate iz zatvorenog kanala u Go, dešava se sledeće:

  • Ako u kanalu postoje podaci, oni će biti pročitani kao i obično.
  • Ako je kanal zatvoren i nema podataka, operacija čitanja će vratiti nultu vrednost tipa kanala i false u drugoj vrednosti (ako se koristi oblik sa dve vrednosti povratka).

Primer:

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

v, ok := <-ch
fmt.Println(v, ok) // Ispisaće: 0 false

Ovo omogućava da se odredi da je kanal zatvoren i da više podataka neće biti. Čitanjem iz zatvorenog kanala bez podataka, gorutina se ne blokira i odmah dobija nultu vrednost.

Ako čitate iz zatvorenog kanala bez provere druge vrednosti, možete dobiti nultne podatke, što je važno uzeti u obzir u logici obrade.