Приоритетный fan-in из трёх каналов

ЗадачаMiddle20 минпроверка — Спринтнапиши код10-t009

Даны три канала с приоритетами high, mid, low. Нужна функция, которая всегда первым читает канал с наивысшим приоритетом, если там есть данные; иначе проверяет средний и только потом низкий. Работает, пока не закрыты все три канала. Также нужно написать генератор feed: он кладёт значения в канал с заданной задержкой и закрывает канал.

main.gogo
1package main2 3import (4	"fmt"5	"sync"6	"time"7)8 9func feed(c chan int, vals []int, delay time.Duration, grp *sync.WaitGroup) {10 11}12 13func fanInByPriority(hi, mid, lo chan int) {14	// your code here15}16 17func main() {18	hi := make(chan int)19	mid := make(chan int)20	lo := make(chan int)21 22	var grp sync.WaitGroup23 24	grp.Add(3)25	go feed(hi, []int{1, 2, 3}, 500*time.Millisecond, &grp)26	go feed(mid, []int{10, 11, 12}, 1*time.Second, &grp)27	go feed(lo, []int{100, 101, 102}, 2*time.Second, &grp)28 29	fanInByPriority(hi, mid, lo)30 31	grp.Wait()32}
⌘ Enter — проверить