我想在我的自定义错误结构中打印所有内容,例如fmt.Print()
打印任何其他结构,但由于它实现了error
,它只打印一个字段,即我通过Error()
传递的字段。
我该怎么做?
答案 0 :(得分:2)
您可以键入断言自定义类型的error
接口。请注意,理想情况下,在执行此操作时应使用“逗号,确定”惯用法,否则如果类型断言失败,您的应用程序将会发生混乱。
package main
import "fmt"
type MyError struct {
Status int
Message string
}
func (e MyError) Error() string {
return e.Message
}
func BadThing() error {
return MyError{404, "Not found"}
}
func main() {
err := BadThing()
if err != nil {
if v, ok := err.(MyError); ok {
fmt.Printf("%+v\n", v.Status) // or v, or v.Message, etc.
}
fmt.Printf("%v\n", err) // Fallback. Can wrap in this in an 'else' if needed.
}
}
Playground - 并进一步阅读:http://blog.golang.org/error-handling-and-go