いろいろ備忘録日記

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

golang

Goメモ-90 (Go の enum と iota の使い方メモ)

概要 Enum のサンプル iota のサンプル 参考 概要 Go には、C#などのように enum という型がありませんが、定数を使って同じような感じにすることが出来ます。 enum と iota に関して、とても参考になった記事があったので、忘れない内にメモメモ。 ★ Ultima…

Goメモ-89 (go-cmp の使い方メモ)(比較処理用のライブラリ, Comparer)

概要 サンプル 概要 比較処理を作っている際に reflect.DeepEqual 使っていたんですが、この子、プライベートなフィールドまで比較対象にしてくれるんですね。。 ちょっと、それは必要なかったので、なんかライブラリ無いかなって探してみたら、go-cmp って…

Goメモ-88 (スライスから配列にコピーする)

概要 サンプル 参考情報 概要 Goを勉強し始めた人からよく聞く質問がこれなので、ついでにここにメモです。 やり方としては、ビルドイン関数の copy(dst, src) を使います。 golang.org copy関数のシグネチャは以下のようになってます。 func copy(dst, src …

Goメモ-87 (2つのスライスを結合する, slice concatenate)

概要 サンプル 概要 よく忘れるのでここにメモ。基本的な事なんですが 2つのスライスを結合する際の newSlice := append(sli1, sli2...) という記法をよく忘れてしまいます。。。 サンプル package slices import ( "github.com/devlights/gomy/output" ) /…

Goメモ-86 (チャネルの要素に指定された処理を適用した結果を返す関数, Map)

概要 サンプル 参考 関連記事 概要 引き続き、小ネタチャネル関数の続き。( #関連記事 参照) python には、mapというビルドイン関数があります。 こんな感じ。 $ python3 Python 3.7.7 (default, Mar 25 2020, 10:55:55) [GCC 8.3.0] on linux Type "help",…

Goメモ-85 (チャネルからのデータをフィルタリングする関数, Filter)

概要 サンプル 参考 関連記事 概要 引き続き、小ネタチャネル関数の続き。( #関連記事 参照) パイプラインを使って処理する場合、やっぱり C# の Where とか Java の filter みたいなのが欲しいところですね。 てことで、サンプルつくってみました。 サンプ…

Goメモ-84 (指定した分チャネルからのデータをスキップする関数, Skip,SkipWhile)

概要 サンプル 参考 関連記事 概要 引き続き、小ネタチャネル関数の続き。( #関連記事 参照) 以前の記事で、指定した個数または条件に合致する間、チャネルから要素を取得する Take 関数について書きました。 devlights.hatenablog.com C#のLinqには、これ…

Goメモ-83 (チャネルの要素に対してインデックスを付与して返す関数, Enumerate)

概要 サンプル 参考 関連記事 概要 引き続き、小ネタチャネル関数の続き。( #関連記事 参照) pythonに enumerate という関数があります。 この関数は、指定されたシーケンスを取り出すと同時にインデックスを付与して返してくれます。 こんな感じ。 $ pytho…

Goメモ-82 (デバッグ時に表示される文字列表現, GoLand, DebugString)

概要 サンプル 概要 忘れない内にメモメモ。 知らなかったのですが、GoLandでデバッグ時に DebugString() string というメソッドを用意しておくと デバッガで表示してくれるみたい。 blog.jetbrains.com v2019.2 から追加された機能みたいですね。 試してみ…

Goメモ-81 (複数のsync.WaitGroupをまとめて管理する型, MergedWaitGroup)

概要 サンプル 概要 先日、指定されたワーカー数でファンアウトさせる関数をつくってみました。 devlights.hatenablog.com ついでなので、それを使った型を一つ作ってみました。 処理を書いていると、sync.WaitGroupを頻繁に利用すると思いますが たまに、sy…

Goメモ-80 (go test のキャッシュを削除するやり方メモ)

概要 キャッシュを消す方法 毎回キャッシュ無視してテスト実行してもらう go test のフラグにどんなのがあるのかを調べる 参考情報 概要 忘れない内にメモメモ。 テストをするために go test を実行していると、たまに以下のようにキャッシュした結果を表示…

Goメモ-79 (指定されたワーカー数でファンアウトさせる関数, FanOut)

概要 サンプル 参考 関連記事 概要 引き続き、小ネタチャネル関数の続き。( #関連記事 参照) 以前にファンインする関数について記事書きました。 devlights.hatenablog.com ついでなので、ファンアウトさせる関数も書いてみました。 サンプル package chans…

Goメモ-78 (指定したインターバルでデータを出力するチャネル, Interval)

概要 サンプル 参考 関連記事 概要 引き続き、小ネタチャネル関数の続き。( #関連記事 参照) たまに処理をするたびに一定時間のインターバルを置いておきたいときがあったりします。 たいてい以下のように書くと思います。 for v := range Take(Repeat(1)) …

Goメモ-77 (シーケンスをチャネルにする, ForEach)

概要 サンプル 参考 関連記事 概要 引き続き、小ネタチャネル関数の続き。( #関連記事 参照) チャネルのパイプラインを構築するとき、諸元のデータをスライスとかで持っている場合があると 最初にそれをチャネルに流していく必要があったりします。一個ルー…

Goメモ-76 (ループ用のチャネル, Loop, LoopInfinite)

概要 サンプル 参考 関連記事 概要 チャネル関数の続き。( #関連記事 参照) 書籍には記載されていないですが、チャネルさんが触ってて面白いので、ネタ的な関数をこれから数回分続けようかなと。 まず、ループする用のチャネルつくる関数です。普通に回した…

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の場…

Goメモ-65 (ゴルーチンと再帰処理の組み合わせメモ) と C#のサンプル

概要 サンプル ついでに C# のサンプル 概要 よくやり方忘れるので、自分用にここにメモ。 WaitGroupの待ち合わせとチャネルのcloseを忘れるとGoにdeadlockって怒られるので注意。 サンプル ディレクトリを再帰的に降りていって出力するサンプル。別に非同期…

Goメモ-64 (*testing.T.Logメソッドの挙動がgo1.13とgo1.14で異なる)

概要 準備 サンプル 概要 以下の記事で知りました。感謝 m( )m dave.cheney.net Go1.13のときは、t.Log() すると、テストが完了してから出力されていたのですが Go1.14からは、バッファリングせずに即出力されるようになっているみたいですね。 準備 自分の…

Goメモ-63 (Shift-JISとEUC-JPなファイルを扱う)

概要 インストール サンプル Shift-JIS EUC-JP 概要 以下、自分用メモです。忘れない内にメモメモ。 現在、ほとんどのファイルが UTF-8 とかになっていることが多いですが それでも、実務とかだと未だに Shift-JIS とか EUC-JP なファイルをよく見ることがあ…

Goメモ-62 (sync.WaitGroupとerrgroupパッケージ)

概要 インストール サンプル sync.WaitGroupでエラー伝播 errgroup.Groupでエラー伝播 errgroupでctx.Contextを使ったサンプル errgroupでパイプライン処理 ついでに結果をExcelに出力するサンプル 概要 忘れない内にメモメモ。 複数の非同期処理の完了を待…

Goメモ-61 (ループ内でdeferする場合のTips)

概要 サンプル サンプル2 概要 Goでソース書いているとき、たまにループ内でdeferを使いたいときがあります。 何個もファイルを開いていくときとか。 そういうとき、ループ内で defer 書くと、GoLandさんが「ループ内で defer を直接使ってるよ!」って警告…