最近業務などgo言語を利用することがあって、一部処理にスレッドアンセーフな処理があり、パイプラインを使った並列化で実装しました。
チャンネルでは、無限ループで閉じられたかどうかというif文を利用して、閉じられた場合には、ループを抜けるというようなロジックを記載することがありますが、range で実装出来ることを知ったので自分へのメモとして記載しておきます。
package main
import "fmt"
func main() {
a := make(chan int)
b := make(chan int)
go func () {
for x := 0; x < 100; x++ {
a <- x
}
close(a)
}()
go func () {
for x := range a {
b <- x * x
}
close(b)
}()
for x := range b {
fmt.Println(x)
}
}