1 package main 2 3 import "fmt" 4 5 func main ( ) { 6 type Item struct { 7 id int64 8 category string 9 } 10 11 var items = [ ] Item { 12 { id : 1 , category : "red" } , 13 { id : 2 , category : "red" } , 14 { id : 3 , category : "blue" } , 15 { id : 4 , category : "blue" } , 16 { id : 5 , category : "green" } , 17 { id : 6 , category : "red" } , 18 } 19 20 var groupA , groupB , groupC = make ( chan Item ) , make ( chan Item ) , make ( chan Item ) 21 22 for _ , it : = range items { 23 go func ( item Item ) { 24 switch item . category { 25 case "red" : 26 groupA < - item 27 case "blue" : 28 groupB < - item 29 default : 30 groupC < - item 31 } 32 } ( it ) 33 } 34 35 for i : = 0 ; i < len ( items ) ; i + + { 36 select { 37 case it : = < - groupA : 38 fmt . Println ( "red item" , it . id ) 39 case it : = < - groupB : 40 fmt . Println ( "blue item" , it . id ) 41 case it : = < - groupC : 42 fmt . Println ( "other item" , it . id ) 43 } 44 } 45 } Чем закончится программа? Выведет программа завершится и напечатает… Паника напечатает до паники, потом panic Deadlock all goroutines are asleep Не скомпилируется ошибка компиляции Гонка данных -race найдёт data race Недетерминировано вывод меняется от запуска к запуску Зависнет не завершится, но и не deadlock
Проверить Сначала подумай без запуска — на собесе компилятора не будет.