Go でエラーのスタックトレースを出す 2
Go でエラーのスタックトレースを出す方法のメモその2
以前の記事 で外部ライブラリから返ってきたエラーのエラーメッセージは保持しつつ、独自に定義したエラーでラップするための実装を書いたのだが、別の書き方もあると思ったので別の書き方もメモする。
以前作ったOGP 画像生成ツールでエラーが出たときのエラーログが不親切だったのでエラーログ書き出しを修正したのだが、
package errors
import (
"errors"
)
var (
ErrorFontReadFailed = errors.New("Failed to read font.")
)
このようにエラーを定義して、エラーが発生するファイルでは “github.com/pkg/errors” を import し
ftBin, err := ioutil.ReadFile(opt.FontPath)
if err != nil {
err = errors.Wrap(e.ErrorFontReadFailed, err.Error())
return
}
このように errors.Wrap を使うと、エラーログ書き出し時に
2021/11/06 23:24:22 Failed to read font.
open : no such file or directory
github.com/k1350/ogpgen/internal/ogpgen.NewOgpImage
/home/k1350/ogpgen/internal/ogpgen/ogpgen.go:57
main.main
/home/k1350/ogpgen/cmd/ogpgen/main.go:27
runtime.main
/usr/lib/go-1.16/src/runtime/proc.go:225
runtime.goexit
/usr/lib/go-1.16/src/runtime/asm_amd64.s:1371
exit status 1
独自に定義したエラーを使いつつ元のエラーメッセージも出力できた。
以前のやり方だと独自エラーを定義した場所もスタックトレースに書き出されてしまって無駄なので、今回の方法のほうがいいかもしれない。