Junior — Middle
Kas notiek, ja mēģināt lasīt datus no kanāla, kurā pašlaik nav elementu?
sobes.tech AI
Atbilde no AI
Go valodā, ja mēģināt lasīt no kanāla, kurš šobrīd nesatur elementus, uzvedība ir atkarīga no kanāla veida:
- Buferēts kanāls: ja buferis ir tukšs, lasīšana bloķējas, līdz kanālā tiks ierakstīts elements.
- Bez bufera kanāls: lasīšana bloķējas, līdz cita gorutīna nosūtīs vērtību.
Tādējādi, lasot no tukša kanāla, tiek bloķēta pašreizējā gorutīna līdz datu parādīšanās vai kanāla aizvēršanai.
Piemērs:
ch := make(chan int)
// Lasīšana no tukša kanāla bloķēs izpildi
val := <-ch // bloķējas, kamēr kāds nesūtīs vērtību
// Lai izvairītos no bloķēšanas, var izmantot select ar default
select {
case val := <-ch:
fmt.Println("Saņemts", val)
default:
fmt.Println("Nav datu kanālā")
}