首页 > 解决方案 > Go 自定义错误类型:为什么要返回指向错误的指针?

问题描述

自定义错误类型允许调用者使用类型断言检查错误类别:

type MyError struct {
    Message string
}

func (e MyError) Error() string {
    return e.Message
}

func GenerateError() error {
    return MyError{"example text"}
}

func main() {
    err := GenerateError()
    _, ok := err.(MyError)
    fmt.Printf("%t\n", ok)
}

打印“真实”。

然而,在我看到的所有解释这种技术的例子中,人们不会这样写代码。相反,它们传递指向自定义错误类型的指针:

type MyError struct {
    Message string
}

func (e *MyError) Error() string {
    return e.Message
}

func GenerateError() error {
    return &MyError{"example text"}
}

func main() {
    err := GenerateError()
    _, ok := err.(*MyError)
    fmt.Printf("%t\n", ok)
}

示例: gobyexample.com这篇 Medium 文章

额外的间接性有什么好处吗?如果它只是更复杂,为什么它更常见?

标签: goerror-handling

解决方案


推荐阅读