Sobes.tech
Junior — Middle

Da li je ponašanje funkcije select u Go predvidljivo ili slučajno?

sobes.tech АИ

Одговор од АИ

Понашање функције select у Go-у је делимично предвидиво, али у случају да више канала буде спремно истовремено, избор канала се врши насумично (случајно). Ово је учињено да би се избегле блокаде и обезбедила фер расподела.

Ако је само један канал спреман, select ће управо њега изабрати. Ако ниједан канал није спреман и нема default, select се блокира.

Пример:

select {
case msg1 := <-chan1:
    fmt.Println("Примљено из канала 1", msg1)
case msg2 := <-chan2:
    fmt.Println("Примљено из канала 2", msg2)
default:
    fmt.Println("Нема спремних канала")
}

Ако су оба канала спремна, избор између њих ће бити насумичан.