1package main2 3import (4 "fmt"5 "strconv"6 "sync"7)8 9func main() {10 var group sync.WaitGroup11 guard := sync.Mutex{}12 buf := make(chan string, 3)13 14 for n := 0; n < 6; n++ {15 group.Add(1)16 go func(buf chan<- string, n int, group *sync.WaitGroup) {17 defer group.Done()18 guard.Lock()19 buf <- fmt.Sprintf("worker #%s reporting", strconv.Itoa(n))20 guard.Unlock()21 }(buf, n, &group)22 }23 24 for {25 select {26 case msg := <-buf:27 fmt.Printf(msg)28 }29 }30 31 group.Wait()32}
Сначала подумай без запуска — на собесе компилятора не будет.