Какой текст напечатает программа

Возможны два исхода: строка stop signal received либо panic: send on closed channel. select не даёт ветке отмены приоритет перед отправкой.

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

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

Возможны два исхода: строка stop signal received либо panic: send on closed channel. select не даёт ветке отмены приоритет перед отправкой.

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

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

Условие

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

package main

import "fmt"

func main() {
  msgChan := make(chan string, 1)
  close(msgChan)
  stopChan := make(chan struct{})
  close(stopChan)

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

Ответ

Возможны два исхода: строка stop signal received либо panic: send on closed channel. select не даёт ветке отмены приоритет перед отправкой.

Обе операции готовы: чтение закрытого stopChan выполняется сразу, а отправка в закрытый msgChan приводит к panic, если выбрана. Ветка msg sent не выполнится. Закрытие каналов нужно координировать с отправителями, а не пытаться обезопасить конкурирующую отправку одним select с сигналом остановки.

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

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

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

Подробнее