Что выведет код 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 ошибок.