Sobes.tech
Junior — Middle

Šta se dešava ako pokušate da pročitate podatke iz kanala koji trenutno ne sadrži elemente?

sobes.tech АИ

Одговор од АИ

U Go, ako pokušate da pročitate iz kanala koji trenutno ne sadrži elemente, ponašanje zavisi od tipa kanala:

  • Bufferirani kanal: ako je buffer prazan, čitanje se blokira dok se ne upiše element u kanal.
  • Bez buffer: čitanje se blokira dok druga gorutina ne pošalje vrednost.

Dakle, čitanje iz praznog kanala dovodi do blokiranja trenutne gorutine dok se ne pojave podaci ili se kanal ne zatvori.

Primer:

ch := make(chan int)

// Čitanje iz praznog kanala će blokirati izvršavanje
val := <-ch // blokira dok neko ne pošalje vrednost

// Da biste izbegli blokiranje, možete koristiti select sa default
select {
case val := <-ch:
    fmt.Println("Primljeno", val)
default:
    fmt.Println("Nema podataka u kanalu")
}