Ответ
Нет, порядок выполнения горутин в select не гарантируется и не может быть задан вручную. select выбирает случайный готовый к выполнению case из тех, что могут быть выполнены. Если несколько case готовы одновременно, выбор между ними псевдослучаен.
ch1 := make(chan int)
ch2 := make(chan int)
go func() { ch1 <- 1 }()
go func() { ch2 <- 2 }()
select {
case <-ch1:
fmt.Println("Получено из ch1")
case <-ch2:
fmt.Println("Получено из ch2")
}
Здесь может сработать любой case, в зависимости от того, какая горутина первой отправит данные. Для приоритизации используйте отдельные select или дополнительные каналы.