go 自定义错误类型
package main import ( "errors" "fmt" ) // MyError 自定义错误类型 type MyError struct { Code int Msg string } // 实现 Error() 方法 func (h *MyError) Error() string { return fmt.Sprintf("status code %d: %s", h.Code, h.Msg) } // DoTest 测试方法 func DoTest(t int) error { if t == 1 { return &MyError{404, "not found"} } else if t == 2 { return &MyError{403, "Forbidden "} } else { return errors.New("未知错误") } } func main() { err := DoTest(1) if err != nil { if _, ok := err.(*MyError); ok && err.(*MyError).Code == 404 { fmt.Println(err.(*MyError).Code) // 404 fmt.Println(err.(*MyError).Msg) // not found fmt.Println(err) // status code 404: not found } else { fmt.Println(err) } } }