Три категории, три канала, один select

Что выведетMiddleпроверка — Спринт07-t008

Элементы red/blue/green в отдельных горутинах раскладываются по трём небуферизованным каналам, а затем читаются через select в цикле. Что выведет программа и какой порядок возможен?

main.gogo
1package main2 3import "fmt"4 5func main() {6	type Item struct {7		id       int648		category string9	}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 <- item27			case "blue":28				groupB <- item29			default:30				groupC <- item31			}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}
Чем закончится программа?
Сначала подумай без запуска — на собесе компилятора не будет.