Какой текст выведет консоль при запуске программы №25

При обычном расписании после первого тика main зависает на отправке true: он же единственный получатель signalCh. Затем блокируется и отправитель false.

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

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

При обычном расписании после первого тика main зависает на отправке true: он же единственный получатель signalCh. Затем блокируется и отправитель false.

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

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

Условие

Укажите, какой вывод появится в консоли после выполнения приведённого Go‑кода.

import (
        "fmt"
        "time"
        )

func main () {
    signalCh := make(chan bool)
    
    go func () {
        time.Sleep(time.Second * 3)
        fmt.Println("get normal  signal")        
        signalCh <- false
    }()
            
    ticker := time.NewTicker(time.Second)
    for {
        select {
            case <- ticker.C:
               fmt.Println("ger interrupted signal")
               signalCh <- true
            case value := <-signalCh:
                fmt.Printf("finish %t", value)
                return        
        }
    }
}

Ответ

При обычном расписании после первого тика main зависает на отправке true: он же единственный получатель signalCh. Затем блокируется и отправитель false.

Около первой секунды печатается ger interrupted signal, после чего выполнение застревает внутри выбранной ветки select. Этот select уже не может выбрать приём из signalCh. Около третьей секунды горутина печатает get normal signal и тоже ждёт отправки. Строки finish при таком ходе нет.

Если main долго не получал процессор, на первом select могут быть готовы обе ветки; выбор приёма false даст finish false. Поэтому абсолютно фиксированный вывод обещать нельзя. Для прерывания завершайте работу непосредственно в ветке таймера либо используйте отдельный канал уведомления, а не отправку самому себе. Ticker необходимо останавливать.

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

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

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

Подробнее