自前 error にエラーコードなどを付与している時
自前で Error() string
なメソッドを持った struct を定義した際、エラーコードなどを持たせていて、それを取り出したい。
package main import "log" type MyError struct { Message string } func (e *MyError) Error() string { return "MyError" } func NewError() error { return &MyError{"Fail"} } func main() { err := NewError() log.Print(err) // これは OK。なんら問題ない log.Print(err.Message) // これは NG。 error interface には Message string がないため。 myerror := err.(*MyError) log.Print(myerror.Message) // これで取り出せる }
ことは単に interface
だということを忘れていたという話なんだけど、結構ひっかかってわからなかった。