• errorはインタフェースなので独自のエラー型を定義することも可能
    • この際、独自のエラー型のゼロ値を返すと慣習に従ったnilチェックを行うことができなくなる
type Status int
 
const (
	InvalidLogin Status = iota + 1
	NotFound
)
 
type StatusErr struct {
	Status  Status
	Message string
}
 
func (se StatusErr) Error() string {
	return se.Message
}
 
func GenerateErrorBroken(flag bool) error {
	var genErr StatusErr
	if flag {
		genErr = StatusErr{Status: NotFound}
	}
	return genErr
}
  • 独自のエラー型を使用する場合は、必ず下記のどちらかの対応を行う
    • 関数が成功した場合にnilを返す
func GenerateError(flag bool) error {
	if flag {
		return StatusErr{Status: NotFound}
	}
	return nil
}
  • errorを保持している任意のローカル変数をerror型とすることで、成功した場合はゼロ値のnilを返す
func GenerateError(flag bool) error {
	var genErr error
	if flag {
		genErr = StatusErr{Status: NotFound}
	}
	return genErr
}