Сначала появится main() started, затем программа заблокируется на c <- "John" и runtime сообщит о deadlock. main() stopped не выполнится.
Блокировка записи в небуферный канал
Сначала появится main() started, затем программа заблокируется на c <- "John" и runtime сообщит о deadlock. main() stopped не выполнится.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Какой вывод получит данная программа? Нужно проанализировать, что произойдёт, когда происходит попытка отправить значение в небуферизированный канал, при отсутствии активного получателя.
package main
import "fmt"
func main() {
fmt.Println("main() started")
c := make(chan string)
c <- "John"
fmt.Println("main() stopped")
}
Ответ
Сначала появится main() started, затем программа заблокируется на c <- "John" и runtime сообщит о deadlock. main() stopped не выполнится.
Отправка в небуферизированный канал требует одновременно готового получателя. В программе нет ни другой горутины, ни чтения из c, поэтому операция не может завершиться.
Решение зависит от задачи: запустить получателя с корректным ожиданием его завершения или использовать буфер, если требуется временно сохранить значение. Само создание буферизированного канала не означает, что данные кто-то обработал; если обработка обязательна, нужно отдельное подтверждение или ожидание.