Sobes.tech
Senior

Co se stane při čtení z uzavřeného kanálu v Go?

sobes.tech AI

Odpověď od AI

Při čtení z uzavřeného kanálu v Go se děje následující:

  • Pokud jsou v kanálu data, budou načtena jako obvykle.
  • Pokud je kanál uzavřen a nemá žádná data, operace čtení vrátí nulovou hodnotu typu kanálu a false ve druhé návratové hodnotě (pokud se používá tvar se dvěma návratovými hodnotami).

Příklad:

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

v, ok := <-ch
fmt.Println(v, ok) // Vypíše: 0 false

To umožňuje určit, že kanál je uzavřen a žádná další data již nepřijdou. Při čtení z uzavřeného kanálu bez dat se gorutina nezablokuje a ihned obdrží nulovou hodnotu.

Pokud čtete z uzavřeného kanálu bez kontroly druhé hodnoty, můžete získat nulová data, což je důležité vzít v úvahu v logice zpracování.