関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。忘れないうちにとりあえずメモメモ。。。
Go 1.20 から、エラーの際に利用する %w
verb が複数指定出来るようになってたんですね。
知らなかったです。
サンプル
package errs import ( "errors" "fmt" "github.com/devlights/gomy/output" ) type _wmErr struct { m string } type _wmErr2 struct { } func (me *_wmErr) Error() string { return me.m } func (me *_wmErr2) Error() string { return "" } // WrapMultipleError は、Go 1.20 で導入された %w を複数指定できるようになった機能のサンプルです。 // // # REFERENCES // - https://future-architect.github.io/articles/20230126a/ // - https://tip.golang.org/doc/go1.20#errors func WrapMultipleError() error { // // Go 1.20 で、 %w を複数指定できるようになった // var ( e1 = errors.New("error 1") e2 = errors.New("error 2") e3 = &_wmErr{m: "error 3"} ) e4 := fmt.Errorf("%w,%w,%w", e1, e2, e3) output.Stdoutf("[e4]", "%T: %v\n", e4, e4) // // errors.Is でちゃんと判定される // output.Stdoutl("[Is(e4, e2)]", errors.Is(e4, e2)) // // errors.As でちゃんと判定される // var wme *_wmErr var wme2 *_wmErr2 output.Stdoutl("[As(e4, &wme) ]", errors.As(e4, &wme)) output.Stdoutl("[As(e4, &wme2)]", errors.As(e4, &wme2)) return nil }
実行すると以下のようになります。
$ task task: Task "build" is up to date task: [run] ./try-golang -onetime ENTER EXAMPLE NAME: error_wrap_multiple_error [Name] "error_wrap_multiple_error" [e4] *fmt.wrapErrors: error 1,error 2,error 3 [Is(e4, e2)] true [As(e4, &wme) ] true [As(e4, &wme2)] false [Elapsed] 25.21µs
参考情報
https://tip.golang.org/doc/go1.20#errors
Goのおすすめ書籍
上の書籍の日本語版が下です。
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。