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
}
- 独自のエラー型を使用する場合は、必ず下記のどちらかの対応を行う
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
}