Sobes.tech
Junior — Middle

Държанието на функцията select в Go е предсказуемо или случайно?

sobes.tech AI

Отговор от AI

Поведението на функцията select в Go е частично предсказуемо, но в случай, че няколко канала са готови едновременно, изборът на канал става случайно (на случаен принцип). Това е направено, за да се избегнат блокировки и да се осигури справедливо разпределение.

Ако само един канал е готов, select ще го избере. Ако нито един канал не е готов и няма default, select се блокира.

Пример:

select {
case msg1 := <-chan1:
    fmt.Println("Получено от chan1", msg1)
case msg2 := <-chan2:
    fmt.Println("Получено от chan2", msg2)
default:
    fmt.Println("Няма готови канали")
}

Ако и двата канала са готови, изборът между тях ще бъде случаен.