いろいろ備忘録日記

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

2020-03-01から1ヶ月間の記事一覧

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 を直接使ってるよ!」って警告…

ChromebookとGitpodでお安く勉強環境を作る

概要 勉強する環境作る Github に登録 勉強用のリポジトリ作る Gitpodに登録する Gitpodの拡張機能をChromeブラウザにインストール GithubのリポジトリをGitpodで開く この環境のメリット この環境のデメリット 参考 概要 個人的に、お安く勉強できる環境が…

Goメモ-60 (インターフェースをちゃんと実装しているか検証するTips)

概要 インターフェースと構造体を定義してみる インターフェースを拡張してみる 構造体のコンストラクタでインタフェース型で返す 複数のインターフェースを実装している場合 概要 Qiitaに以下のとても勉強になる記事がありました。 qiita.com なるほど、、…

Goメモ-59 (現在のメモリ使用量を取得, runtime.MemStats)

概要 サンプル 参考 概要 メモリ使用量を取得するやり方を調べていたので、忘れないうちにメモメモ。 大抵どの言語でもあるものなんですが、Goの場合は runtime.ReadMemStats(*runtime.MemStats) で取得できるみたいですね。 以下、ちょっとしたメモ書きサン…

Goメモ-58 (GoLandで変数のシャドウイングを検知するように設定する)

概要 Ctrl+Shift+AでActions表示して "shadow" って入力 参考 概要 var hoge *Hogeif condition != nil { hoge, err := https://t.co/3dOQ15DCmc(ctx, hoge_key)if err != nil {return nil, err} fmt.Printf("%v", *hoge)} else {hoge = nil}こんな感じのコ…

Goメモ-57 (Excelシートの画像の上にNo.XXってナンバリングしていく)

まえがき 概要 サンプル まえがき devlights.hatenablog.com devlights.hatenablog.com devlights.hatenablog.com devlights.hatenablog.com devlights.hatenablog.com の続きです。。。ご覧なっていない場合は先に上を御覧くださいませー。 概要 仕事上、大…

Goメモ-56 (Excelシートのページ区切りの先頭にメッセージ入れる)

まえがき 概要 サンプル まえがき devlights.hatenablog.com devlights.hatenablog.com devlights.hatenablog.com devlights.hatenablog.com の続きです。。。ご覧なっていない場合は先に上を御覧くださいませー。 概要 仕事上、大抵の人はWindowsで作業して…

Goメモ-55 (sync.Mutex, Goroutines, Tour of Go)

概要 サンプル 概要 Tour of Go のメモをしていたけど、書いたことをすっかり忘れていたので勿体ないのでここにメモ。 Tour of Go の - sync.Mutex についてのサンプル。 tour.golang.org Goでミューテックスを扱う場合は、sync.Mutexを使います。 基本的に…