Что выведет код Junior Каналы и select спрашивают часто обновлено
Что выведет Go: range по закрытому буферизованному каналу
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23.
package main
import "fmt"
func main() {
ch := make(chan int, 3)
ch <- 1
ch <- 2
close(ch)
for v := range ch {
fmt.Print(v, " ")
}
v, ok := <-ch
fmt.Println(v, ok, len(ch), cap(ch))
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 1 2 0 false 0 3. Закрытие не выбрасывает данные из буфера: range дочитывает 1 и 2 и завершается.
Что выведет
1 2 0 false 0 3
Разбор
Закрытие не выбрасывает данные из буфера: range дочитывает 1 и 2 и завершается. Дальнейшее чтение сразу даёт нулевое значение и ok == false. Буфер пуст (len 0), ёмкость остаётся 3.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.