Что выведет код Middle Паттерны конкурентности обновлено
Что выведет Go: pipeline из трёх стадий
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23.
package main
import "fmt"
func gen(n int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for i := 1; i <= n; i++ {
out <- i
}
}()
return out
}
func sq(in <-chan int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for v := range in {
out <- v * v
}
}()
return out
}
func main() {
sum := 0
for v := range sq(sq(gen(3))) {
sum += v
}
fmt.Println(sum)
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 98. gen выдаёт 1, 2, 3, первая стадия возводит в квадрат (1, 4, 9), вторая ещё раз (1, 16, 81).
Что выведет
98
Разбор
gen выдаёт 1, 2, 3, первая стадия возводит в квадрат (1, 4, 9), вторая ещё раз (1, 16, 81). Сумма 98. Каждая стадия закрывает свой выход, поэтому range в main завершается.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что выведет Go: слияние каналов fan-in
Следующий вопрос
Код-ревью Go: параллельная обработка с ошибками