golang.org/x/xerrors
結構考えることあるな...
%w と %v
どちらも trace を引き継いだ error を作る
いずれの文字列化フォーマットの結果はおなじ %s, %v, %+v
末尾が : %w の場合は interface Wrapper(Unwrap を実装したエラー)オブジェクトが返る
%w なら wrap されていても xerrors.Is でエラー同士の比較ができる
snippet
code:errorf.json
"wrap error": {
"prefix": "errorf",
"body": [
"xerrors.Errorf(\"$1: %w\", err)"
]
},
...
感想
とりあえず思考停止で : %w で引き回せばあまり困らない
パフォーマンス気にするなら : %v で、比較する必要のあるところだけ : %w
とはいえ、追加の情報を足しつつ、中身を取り出したい...という要求は今まであまりない気がするなあ
なくてもやりくりしてきた
一番外側まで全部 wrap していって何かしたり
1回の処理で複数のエラーが起きえて、それをまとめてフィードバックしたい場合とかは作りやすいか?