いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-75 (一つの入力を複製して2つにするチャネル, Tee)

概要 サンプル 参考 関連記事 概要 チャネル関数の続き。 あんまり使うことは無さそうですが、せっかく書いたのでメモメモ。 unix系のteeコマンドのように、一つの入力を2つに複製してくれるチャネルを生成する関数。 データを処理しながら、ついでに非同期…

Goメモ-74 (複数のOrDoneチャネルを使って処理, OrDone, FanOut, Workers)

概要 サンプル 参考 関連記事 概要 devlights.hatenablog.com の補足サンプル。 上の記事では、一つのチャネルをOrDone() でラップして処理していましたが 複数の場合のサンプルもついでに追加。 サンプル package ordone import ( "context" "fmt" "runtime…

Goメモ-73 (fan-in パターンでデータを集約するチャネル, FanIn)

概要 サンプル 参考 関連記事 概要 チャネル関数の続き。 今回は、Fan-In (ファンイン) パターンで複数のチャネルのシーケンスを一つにまとめて消費していくチャネルを作る関数について。 非同期系の本とか呼んでいると、よくファン・イン(fan-in) とか ファ…

Goメモ-72 (指定されたチャネルのシーケンスを順に消費していくチャネル, Concat)

概要 サンプル 参考 関連記事 概要 チャネル関数の続き。 今回は、複数のチャネルのシーケンスを一つにまとめて順に消費していくチャネルを作る関数について。 例えば、3つのファイルを読み込む処理書いていて、それぞれのファイルを読む処理をゴルーチンに…

Goメモ-71 (指定されたチャネルのどちらかが閉じたら閉じるチャネル, OrDone)

概要 サンプル 参考 関連記事 概要 チャネル関数の続き。 今回は、終了判定のdoneチャネルと入力データのチャネルのどちらかが閉じたら閉じるチャネルを返す関数について。 Goで、チャネルを使った処理を書くと、とても便利です。例えば、何かのチャネルのデ…

Goメモ-70 (チャネルから指定された個数分取得するチャネル, Take, TakeWhile, TakeWhileFn)

概要 サンプル 参考 関連記事 概要 チャネル関数の続き。 今回は、指定されたチャネルから指定された個数分だけデータを取り出すチャネルを返す関数です。 C# の Enumerable.Take や Enumerable.TakeWhile チックな感じ。 サンプル package chans // Take --…

Goメモ-69 (指定された値を繰り返すチャネル, Repeat)

概要 サンプル 参考 関連記事 概要 チャネル関数の続き。 今回は、指定された値を延々と繰り返してくれるチャネルを返す関数です。C# の Enumerable.Repeat チックな感じ。 サンプル package chans // Repeat -- 指定した値を永遠と繰り返すチャネルを返しま…

Goメモ-68 (型の組み込みについてのメモ, Embedded, Effective-Go)

概要 サンプル 参考 概要 よく忘れてしまうので、ここにメモメモ。 Go には、他の言語にあるような継承の概念がありませんが、型の組み込みはサポートされています。 (このあたりはよく議論の的みたいですが、個人的には継承は普段あまり使わないので私は不…

Goメモ-67 (複数の全てのチャネルが閉じたら閉じるチャネル, WhenAll)

概要 サンプル 参考 関連記事 概要 小ネタ。結構便利なので個人的にはよく使っているパターンです。 C#には、複数のタスクをまとめてしまって、その内の全てが完了したら完了扱いにしてくれるタスクを返す Task.WhenAll() というメソッドがあります。 Goの場…

Goメモ-66 (どれか一つのチャネルが閉じたら閉じるチャネル, WhenAny)

概要 サンプル 参考 概要 小ネタ。結構便利なので個人的にはよく使っているパターンです。 C#には、複数のタスクをまとめてしまって、その内のどれか一つでも完了したら完了扱いにしてくれるタスクを返す Task.WhenAny() というメソッドがあります。 Goの場…