wrapmsg
— fmt.Errorf のメッセージに制約を —
👉 github.com/Warashi/wrapmsg
golang.tokyo #32
澤田 晋之介
自己紹介
こんなことありませんか?
func Hoge() error {
if err := Fuga(); err != nil {
return fmt.Errorf(“failed to Fuga: %w”, err)
}
}
func main() {
if err := Hoge(); err != nil {
log.Println(err)
}
}
// OUTPUT: failed to Fuga: failed XXX: cannot XXX: failed to……
「失敗した」が冗長
重要なのは「何に」失敗したのか
じゃあどういったメッセージがいいのよ
— wrapmsg が生まれるまで —
こういうときは(準)標準パッケージを調べる
👉 github.com/golang/pkgsite にて呼び出しの記述をそのままメッセージに詰めているものがあった� ex) fmt.Errorf("git.Init: %w", err)
👉 アプリケーションを書くならこれでよくね?(ライブラリを書くときには適さないかも)
👉 コードレビューでtypo指摘するの辛いからlinterにしよ
wrapmsgがやること
最終的に強制するのは “foo.bar.Baz: %w” という形式
謝辞
github.com/gostaticanalysis/skeleton/v2 のおかげで開発が楽でした。ありがとうございます。
また、(準)標準パッケージを調査してくれた同僚には感謝しています。
最後に、こんな日曜大工みたいなlinterをプロジェクトに突っ込んでも笑って見守ってくれたチームのみんなにも感謝しています。