Вопрос: Как написать простой generic pipeline с каналами (map/filter) ?
Go
Junior
Без компании
Вопрос: Как написать простой generic pipeline с каналами (map/filter) ?
Ответы
Пример: генератор → map → filter → consumer.
```go
package main
import "fmt"
func Gen(nums ...int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for _, n := range nums {
out <- n
}
}()
return out
}
func Map[T any, R any](in <-chan T, f func(T) R) <-chan R {
out := make(chan R)
go func() {
defer close(out)
for v := range in {
out <- f(v)
}
}()
return out
}
func Filter[T any](in <-chan T, pred func(T) bool) <-chan T {
out := make(chan T)
go func() {
defer close(out)
for v := range in {
if pred(v) {
out <- v
}
}
}()
return out
}
func main() {
in := Gen(1, 2, 3, 4, 5)
mapped := Map(in, func(x int) int { return x * x })
filtered := Filter(mapped, func(x int) bool { return x%2 == 0 })
for v := range filtered {
fmt.Println(v)
}
}
```