Facilitatorパターンの紹介

最近ちょろっとgo 1.18beta1を使ってGenericsに触れたので、GoのGenerics関連の実装パターンを紹介する。 Generics facilitators in Goで@rakyll氏が紹介していたFacilitatorsというパターンだ。 といってもそんなに難しいものではない。理解すべき点は2つ。 Goではメソッドに型パラメータを持たせられないという制約がある 代わりにレシーバをパラメータ化できる ジェネリックなメソッドがほしいときは一度ジェネリックな型の値を返し、その型で目的のメソッドを実装する。 この中間で一度挟んでいる型をFacilitatorと呼んでいる。 ...

1月 24, 2022 · garsue

GoでGCのタイミングをprintデバッグする

runtime.SetFinalizerを使って値ごとのデバッグプリント関数を仕込むことでGCされたときにデバッグログを残すテクニックを教えてもらったのでメモしておく。 package main import ( "bytes" "fmt" "runtime" ) func main() { buf := bytes.NewBuffer(nil) runtime.SetFinalizer(buf, func(v interface{}) { fmt.Printf("disposed: %T\n", v) }) runtime.GC() } みたいな感じで確認できる(Playground)。ただし上記サンプルだとすぐにプログラムが終了する都合上、実行ごとにログが出たり出なかったり結果が安定しなかった。ファイナライザーの実行は別Goroutineで実行されるとのことなのでそのへんはやむなし。

9月 12, 2021 · garsue

Fuzzing in Go

Fuzzing testがacceptされた。 ここらでGoにおけるFuzzingの現状をまとめておく。 Fuzzingとは 自動生成した入力値(テストケース)に対してテスト対象のプログラムが正常に処理できるか判定する手法。 ...

4月 4, 2021 · garsue

GoBoyのビルド

GoBoyをWindows環境でビルドするのにやった作業を残しておく。 MinGW WindowsでのビルドはMinGWが必要になる。MinGWを入れる代わりにMSYS2をscoopで入れた。 scoop install msys2 以降はmsys2.cmdでMSYS2環境内のシェルで作業する。 ...

2月 7, 2021 · garsue

GoLandさんジェネリクスサポートがんばってる

Experimenting with Go Type Parameters (Generics) in GoLand – GoLand Blog | JetBrainsを読んだ感想。 前段はGoのジェネリクス導入に関する今までの歴史と現状のGo2実装を手元で動かす方法の紹介になっている。 GoLandでGo本体をcloneしてビルドするあたり、さすがといったところ。 ...

11月 29, 2020 · garsue

GitLab CLIツール Glab

言いたいこと GitLab使いはGlab使うといいぞ。 基本パターン MR glab mr create glab mr view glab mr merge ghと違ってpushまではやってくれないので注意。 CI/CD確認 glab pipeline list glab pipeline status #000000000 背景とか GitHub Actions登場以降、ちょっと影が薄くなったGitLab.comをみんな使っているだろうか。 ...

11月 8, 2020 · garsue

しょうもないSlackのスラッシュコマンドつくった

N営業日後の日付を教えてくれるSlackのスラッシュコマンドをつくった。 N🈺 /nei 5 とか打てば指定した日数後の営業日を教えてくれる。 「営業日」の定義は「土日・祝日でない日」。大晦日とか祝日じゃないので注意。 ...

9月 27, 2020 · garsue