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
falseve 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í.