Goでカスタムエラータイプを使用するのに苦労しています。私はこれを読みます エラーに関するブログ投稿
だから私はこれを試しました:
私のmodel.goでカスタムエラーを定義しました:
type ModelMissingError struct {
msg string // description of error
}
func (e *ModelMissingError) Error() string { return e.msg }
私のメソッドの1つで、次のようなカスタムエラーをスローします。
...
return Model{}, &ModelMissingError{"no model found for id"}
...
そのメソッドの呼び出し元で、そのタイプについて返されたエラーを確認し、それが実際にModelMissingError
である場合はアクションを実行します。
これを行うにはどうすればよいですか?
私はこれを試しました:
if err == model.ModelMissingError
結果は*type model.ModelMissingError is not an expression*
明らかに何かが欠けています。
ああ、わかったと思う。私はダムダムです。ブログの投稿を読むと、次のようなGoのビットがさらに公開されます。
serr, ok := err.(*model.ModelMissingError)
これはコンマokイディオムです。明らかに go lang tour をやり直す必要があります
次のように、switchステートメントを使用してエラーアサーションを作成できました。
err := FuncModelMissingError()
switch t := err.(type) {
default:
fmt.Println("not a model missing error")
case *ModelMissingError:
fmt.Println("ModelMissingError", t)
}
これがお役に立てば幸いです。
タイプ全体で検証する場合:
switch err := errorFromFunction(); err.(type) {
case nil:
fmt.Println("No Error Function Executed Successfully")
case *ErrorType1:
fmt.Println("Type1 Error: ", err)
case *ErrorType2:
fmt.Println("Type2 Error", err)
}
エラーを知っていて検証したい場合:
err, ok := err.(*ErrorType1)