Sobes.tech
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")
}