Go

Pipeline (channel chain)

admin by @admin ADMIN
1d ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
A pipeline is a chain of stages connected by channels — each stage runs in its own goroutine. Classic Go pattern for streaming transformations with backpressure built in.
Go
Raw
package main

import "fmt"

func source(nums ...int) <-chan int {
    out := make(chan int)
    go func() {
        defer close(out)
        for _, n := range nums { out <- n }
    }()
    return out
}

func square(in <-chan int) <-chan int {
    out := make(chan int)
    go func() {
        defer close(out)
        for n := range in { out <- n * n }
    }()
    return out
}

func filter(in <-chan int, pred func(int) bool) <-chan int {
    out := make(chan int)
    go func() {
        defer close(out)
        for n := range in {
            if pred(n) { out <- n }
        }
    }()
    return out
}

func main() {
    nums    := source(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    squared := square(nums)
    big     := filter(squared, func(n int) bool { return n > 20 })

    for v := range big {
        fmt.Println(v)        // 25 36 49 64 81 100
    }
}
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.