• 同じメッセージを使用して複数のエラーをラップしたい場合はdeferを使うことで簡潔にできる
func DoSomeThings(val1 int, val2 string) (_ string, err error) {
	defer func() {
		if err != nil {
			err = fmt.Errorf("in DoSomeThings: %w", err)
		}
	}()
	val3, err := doThing1(val1)
	if err != nil {
		return "", err
	}
	val4, err := doThing2(val2)
	if err != nil {
		return "", err
	}
	return doThing3(val3, val4)
}
  • deferされた関数でerrを参照できるように戻り値の第二引数には名前をつけておく