Junior — Middle
Mi történik, ha megpróbálsz adatokat olvasni egy olyan csatornából, amely jelenleg nem tartalmaz elemeket?
sobes.tech MI
Válasz az MI-től
Go nyelvben, ha megpróbálsz olvasni egy csatornából, amely jelenleg nem tartalmaz elemeket, a viselkedés a csatorna típusától függ:
- Bufferelt csatorna: ha a puffer üres, az olvasás blokkolódik, amíg egy elem nem kerül írásra a csatornába.
- Buffer nélküli csatorna: az olvasás blokkolódik, amíg egy másik gorutina nem küld értéket.
Ezért az üres csatornából való olvasás blokkolja az aktuális gorutina végrehajtását, amíg adatok nem jelennek meg vagy a csatorna be nem záródik.
Példa:
ch := make(chan int)
// Üres csatornából való olvasás blokkolja a végrehajtást
val := <-ch // blokkol, amíg valaki nem küld értéket
// A blokkolás elkerülése érdekében használhatunk select-et default-tal
select {
case val := <-ch:
fmt.Println("Kapott", val)
default:
fmt.Println("Nincs adat a csatornában")
}