Я думаю, это потому, что вы используете небуферизованный канал и канал пуст или отправитель не готов , например:
out := make(chan string)
Это поведение хорошо объяснено в спецификациях канала :
Если емкость равна нулю или отсутствует, канал не буферизуется, и связь успешна только тогда, когда и отправитель, и получатель готовы.
А также от эффективного Go канала
Если канал не буферизован, отправитель блокируется до тех пор, пока получатель не получит значение
Если вы хотите, чтобы получатель ждал каких-либо данных из канала, и вы не знаете, отправил ли отправитель данные в канал или нет, используйте буферный канал .
out := make(chan string, 100)