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("Нема спремних канала")
}
Ако су оба канала спремна, избор између њих ће бити насумичан.