Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go fmt.Print(myError)而不隐式调用Error()?_Go - Fatal编程技术网

Go fmt.Print(myError)而不隐式调用Error()?

Go fmt.Print(myError)而不隐式调用Error()?,go,Go,我想像fmt一样打印自定义错误结构中的所有内容。print打印任何其他结构,但由于它实现了错误,所以它只打印一个字段,即我通过错误传递出去的字段 如何执行此操作?您可以键入并将错误接口断言到自定义类型。请注意,理想情况下,在执行此操作时应使用“逗号,ok”习惯用法,否则如果类型断言失败,应用程序将死机 package main import "fmt" type MyError struct { Status int Message string } func (e My

我想像fmt一样打印自定义错误结构中的所有内容。print打印任何其他结构,但由于它实现了错误,所以它只打印一个字段,即我通过错误传递出去的字段

如何执行此操作?

您可以键入并将错误接口断言到自定义类型。请注意,理想情况下,在执行此操作时应使用“逗号,ok”习惯用法,否则如果类型断言失败,应用程序将死机

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应该打印整个结构。我的打字错误。