Go fmt.Print(myError)而不隐式调用Error()?
我想像fmt一样打印自定义错误结构中的所有内容。print打印任何其他结构,但由于它实现了错误,所以它只打印一个字段,即我通过错误传递出去的字段 如何执行此操作?您可以键入并将错误接口断言到自定义类型。请注意,理想情况下,在执行此操作时应使用“逗号,ok”习惯用法,否则如果类型断言失败,应用程序将死机Go fmt.Print(myError)而不隐式调用Error()?,go,Go,我想像fmt一样打印自定义错误结构中的所有内容。print打印任何其他结构,但由于它实现了错误,所以它只打印一个字段,即我通过错误传递出去的字段 如何执行此操作?您可以键入并将错误接口断言到自定义类型。请注意,理想情况下,在执行此操作时应使用“逗号,ok”习惯用法,否则如果类型断言失败,应用程序将死机 package main import "fmt" type MyError struct { Status int Message string } func (e My
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.
}
}
-进一步阅读:请为您的错误结构添加代码,是的,但我想动态打印所有字段,就像go通常那样。有办法吗?我必须使用反射吗?fmt.Printv仍然打印Errorfmt.Printf%v\n,v应该打印整个结构。我的打字错误。