Горутины, буферизированный канал и недостижимый код

Код-ревьюMiddle15 минпроверка — Спринт23-t011

Пять горутин-воркеров под мьютексом пишут строки в буферизированный канал, главная горутина читает канал в бесконечном цикле с select. Что произойдёт при запуске? Найдите проблемы и отрефакторьте код.

Как на собесе: 15 минут, ищи всё — гонки, утечки, ошибки, безопасность, стиль. Ссылайся на строки.

review.gogo
1package main2 3import (4	"fmt"5	"strconv"6	"sync"7)8 9func main() {10	var wg sync.WaitGroup11	results := make(chan string, 3)12	var mu sync.Mutex13 14	for i := 0; i < 5; i++ {15		wg.Add(1)16		go func(ch chan<- string, i int, group *sync.WaitGroup) {17			defer wg.Done()18			mu.Lock()19			ch <- fmt.Sprintf("worker %s", strconv.Itoa(i))20			mu.Unlock()21		}(results, i, &wg)22	}23 24	for {25		select {26		case r := <-results:27			fmt.Println(r)28		}29	}30 31	wg.Wait()32	close(results)33}
⌘ Enter — проверить