Что выведет код Middle Каналы и select обновлено
Что выведет Go: синхронизация через небуферизованный канал
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.
package main
import "fmt"
func main() {
ch := make(chan int)
done := make(chan struct{})
go func() {
for v := range ch {
fmt.Println("получил", v)
}
fmt.Println("канал закрыт")
close(done)
}()
for i := 1; i <= 2; i++ {
ch <- i
}
close(ch)
<-done
fmt.Println("готово")
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: получил 1, получил 2, канал закрыт, готово. Отправка в небуферизованный канал завершается, только когда получатель забрал значение, поэтому «получил» печатается для каждого значения по порядку.
Что выведет
получил 1
получил 2
канал закрыт
готово
Разбор
Отправка в небуферизованный канал завершается, только когда получатель забрал значение, поэтому «получил» печатается для каждого значения по порядку. После close цикл range завершается, горутина закрывает done, и main печатает последнюю строку.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.