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("Няма готови канали")
}
Ако и двата канала са готови, изборът между тях ще бъде случаен.