9.4 エラーと値
errorはインタフェースなので独自のエラー型を定義することも可能
この際、独自のエラー型のゼロ値を返すと慣習に従ったnilチェックを行うことができなくなる
code:go
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を返す
code:go
func GenerateError(flag bool) error {
if flag {
return StatusErr{Status: NotFound}
}
return nil
}
errorを保持している任意のローカル変数をerror型とすることで、成功した場合はゼロ値のnilを返す
code:go
func GenerateError(flag bool) error {
var genErr error
if flag {
genErr = StatusErr{Status: NotFound}
}
return genErr
}