Будет напечатана только стартовая строка, затем программа зависнет на nil-канале и обычно завершится fatal error о deadlock. Ни один обмен сообщениями не произойдёт.
Какой вывод получит консоль при запуске программы №45
Будет напечатана только стартовая строка, затем программа зависнет на 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.