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

Будет напечатана только стартовая строка, затем программа зависнет на nil-канале и обычно завершится fatal error о deadlock. Ни один обмен сообщениями не произойдёт.

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

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

Будет напечатана только стартовая строка, затем программа зависнет на nil-канале и обычно завершится fatal error о deadlock. Ни один обмен сообщениями не произойдёт.

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

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

Условие

Каким будет результат печати после выполнения следующего кода

import (
        "fmt"
        )
 func Display( c chan string) {
    fmt.Println("Display message: %s\n", <-c)
 }
 
 func main() {
    fmt.Println("the programm has been started")
    
    var ch chan string
    go Display(ch)
    
    ch <- "first message"
    ch <- "second message"
    fmt.Println("the programm has been has been finished")        


}

Ответ

Будет напечатана только стартовая строка, затем программа зависнет на nil-канале и обычно завершится fatal error о deadlock. Ни один обмен сообщениями не произойдёт.

var ch chan string создаёт nil, а не работающий канал: отправка и получение блокируются. После make(chan string) остаётся вторая проблема — Display читает лишь одно сообщение, поэтому вторая отправка тоже зависнет. Сделайте в Display цикл range, после отправок закройте канал и дождитесь читателя. Для %s используйте Printf, не Println.

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

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

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

Подробнее