Какой текст появится в консоли при запуске программы?

Возможны stop signal received или panic: send on closed channel. Закрытый doneCh не гарантирует выбора ветки отмены.

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

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

Возможны stop signal received или panic: send on closed channel. Закрытый doneCh не гарантирует выбора ветки отмены.

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

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

Условие

Определите, какой вывод получит консоль после выполнения представленного ниже кода на Go.

package main

import "fmt"

func main() {
    messageCh := make(chan string, 1)
    close(messageCh)
    doneCh := make(chan struct{})
    close(doneCh)

    select {
    case messageCh <- "msg":
        fmt.Println("msg sent")
    case <-doneCh:
        fmt.Println("stop signal received")
    }
}

Ответ

Возможны stop signal received или panic: send on closed channel. Закрытый doneCh не гарантирует выбора ветки отмены.

Select может выбрать отправку в уже закрытый messageCh, и тогда panic произойдёт до fmt.Println("msg sent"). Обе ветки готовы, приоритета у чтения нет. Исправление — корректный жизненный цикл канала: закрывать его только после окончания всех отправителей, а не рассчитывать на проверку другого канала.

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

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

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

Подробнее