TL;DR
- Go で複数のエラーを 1 つにまとめるには、
errors.Joinを使う。 - まとめたエラーを分解するには、
interface{ Unwrap() []error }に型アサーションしてからUnwrapメソッドを呼ぶ。
背景
複数のエラーを 1 つの error として返し、呼び出し元で 1 つずつ処理したかった。
検証
エラーを集約する
errors.Join に複数のエラーを渡すと、1 つのエラーにまとめられる。
err1 := errors.New("err1")
err2 := errors.New("err2")
err := errors.Join(err1, err2)エラーを分解する
集約したエラーを interface{ Unwrap() []error } に型アサーションし、Unwrap メソッドを呼ぶと、元のエラーのスライスを取り出せる。
errs := err.(interface{ Unwrap() []error })
for _, e := range errs.Unwrap() {
fmt.Println(e)
}