Error Handling
errors.Join: 複数の原因をerrors.Isで照合できる
errors.Joinでまとめたエラーは、含まれる各原因をerrors.Isで見つけられます。
Sourcejoin.go
Go 1.22
package errorexample
import "errors"
var (
ErrDatabase = errors.New("database unavailable")
ErrTimeout = errors.New("request timed out")
)
func CombinedFailure() error {
return errors.Join(ErrDatabase, ErrTimeout)
}Testjoin_test.go
Go 1.22
package errorexample
import (
"errors"
"testing"
)
func TestErrorsJoinした複数の原因をErrorsIsで照合できる(t *testing.T) {
err := CombinedFailure()
if !errors.Is(err, ErrDatabase) || !errors.Is(err, ErrTimeout) {
t.Fatalf("errors.Is did not find every joined error: %v", err)
}
}01Assertion
このテストで確認できること
- databaseとtimeoutの2つのsentinel errorをJoinする
- errors.Isが両方の原因にtrueを返す
複数の後処理が失敗したときに、最初の一つだけを捨てずに返せます。呼び出し側はエラー文字列でなくerrors.Isで、処理可能な原因を個別に照合します。
OBSERVED RESULT
errors.Is(joined, ErrDatabase) → true
errors.Is(joined, ErrTimeout) → true