パイプライン パターンは、ステージを通じて並行してデータを処理する強力な方法です。各ステージはデータに対して異なる操作を実行し、次のステージに渡します。
チャネルを使用してデータを渡すことで、パイプライン パターンにより多くの場合パフォーマンスが向上します。
アイデアは非常にシンプルで、各ステージがチャネル上で反復され、データがなくなるまでデータを取得します。データ項目ごとに、ステージはその操作を実行し、その結果を出力チャネルに渡し、入力チャネルにデータがなくなったら最後にチャネルを閉じます。 チャネルを閉じることは、下流ステージがいつ終了するかを知るために重要です
一連の数値を作成し、それらを 2 倍にし、低い値をフィルタリングして、最後にコンソールに出力します。
func produce(num int) chan int { out := make(chan int) go func() { for i := 0; i < num; i++ { out <- rand.Intn(100) } close(out) }() return out } func double(input <-chan int) chan int { out := make(chan int) go func() { for value := range input { out <- value * 2 } close(out) }() return out } func filterBelow10(input <-chan int) chan int { out := make(chan int) go func() { for value := range input { if value > 10 { out <- value } } close(out) }() return out } func print(input <-chan int) { for value := range input { fmt.Printf("value is %d\n", value) } } func main() { print(filterBelow10(double(produce(10)))) }
main() を構造化するには明らかに、より読みやすい方法があります:
func main() { input := produce(10) doubled := double(input) filtered := filterBelow10(doubled) print(filtered) }
ご自身の好みに基づいてスタイルをお選びください。
ここに何を付け加えますか?以下にコメントを残してください。
ありがとうございます!
この投稿とこのシリーズのすべての投稿のコードはここにあります
以上がGo のパイプライン パターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。