gpt4 book ai didi

go - fmt.Print(myError) 没有隐式调用 Error()?

转载 作者:数据小太阳 更新时间:2023-10-29 03:33:32 25 4
gpt4 key购买 nike

我想打印我的自定义错误结构中的所有内容,例如 fmt.Print() 打印任何其他结构,但由于它实现了 error 它只打印一个字段,我通过 Error() 传递了一个。

我该怎么做?

最佳答案

您可以将 error 接口(interface)类型断言到您的自定义类型。请注意,理想情况下,您应该在执行此操作时使用“comma, 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.
}
}

Playground - 进一步阅读:http://blog.golang.org/error-handling-and-go

关于go - fmt.Print(myError) 没有隐式调用 Error()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25150173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com