Sobes.tech
Junior — Middle

Šta se prvo izvršava u operatoru izbora: obrada podataka iz kanala ili čitanje iz trenutnog konteksta?

sobes.tech АИ

Одговор од АИ

U naredbi select u Go, redosled izvršavanja zavisi od spremnosti kanala i drugih operacija. Ako je više slučajeva istovremeno spremno, odabira se slučajni.

Što se tiče poređenja obrade podataka iz kanala i čitanja iz konteksta (context):

  • Ako u selectu postoji slučaj za čitanje iz kanala i slučaj za čitanje iz konteksta (npr., <-ctx.Done()), i oba su spremna, izbor će biti slučajan.
  • Ako je spreman samo jedan od njih, on će biti izvršen.

Stoga, ne može se sa sigurnošću reći šta će biti izvršeno prvo — to zavisi od stanja kanala i konteksta u trenutku izvršavanja select.

Primer:

select {
case data := <-ch:
    // obrada podataka iz kanala
case <-ctx.Done():
    // obrada otkazivanja konteksta
}

Ako su i ch i ctx.Done() spremni, izbor će biti slučajan.