// Исправить код

Нужно исправить тип параметра канала, убрать лишний mutex и закрыть канал после WaitGroup. Бесконечный цикл сейчас не достигает wg.Wait.

Короткий ответ

Что ответить на собеседовании

Нужно исправить тип параметра канала, убрать лишний mutex и закрыть канал после WaitGroup. Бесконечный цикл сейчас не достигает wg.Wait.

Подробный разбор

Ответ с пояснениями

Условие

// Исправить код func FixProblem() { var wg sync.WaitGroup ch := make(chan string, 5) mu := sync.Mutex{} for i := 0; i < 5; i++ { wg.Add(1) go func(ch<- string, i int, wg *sync.WaitGroup) { defer wg.Done() mu.Lock() defer mu.Unlock() msg := fmt.Sprintf("Goroutine %s", strconv.Itoa(i)) ch <- msg }(ch, i, &wg) } for { select { case q := <-ch: fmt.Println(q) } } wg.Wait() }

Ответ

Нужно исправить тип параметра канала, убрать лишний mutex и закрыть канал после WaitGroup. Бесконечный цикл сейчас не достигает wg.Wait.

Вариант (нужны fmt и sync):

func FixProblem() {
    var wg sync.WaitGroup
    ch := make(chan string, 5)
    for i := 0; i < 5; i++ {
        wg.Add(1)
        go func(out chan<- string, i int) {
            defer wg.Done()
            out <- fmt.Sprintf("Goroutine %d", i)
        }(ch, i)
    }
    go func() {
        wg.Wait()
        close(ch)
    }()
    for msg := range ch {
        fmt.Println(msg)
    }
}

Канал уже поддерживает конкурентные отправки, поэтому mutex не нужен. В исходнике параметр ch<- string синтаксически неверен. Без закрытия после пяти сообщений чтение ждало бы бесконечно; чтение закрытого канала без ok/range, напротив, создало бы цикл нулевых значений. Порядок строк не фиксирован.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее