Go -错误,由于无法展开自定义错误类型

yeotifhr  于 2022-12-20  发布在  Go
关注(0)|答案(1)|浏览(109)

我尝试使用Go语言的stdlib包errors来展开一个使用errors.As的自定义错误类型,但是似乎检查失败了,我无法提取底层错误。
我摘录了一个可重复性最小的例子:

package main

import (
    "errors"
    "fmt"
)

type myError struct {
    err error
}

func (m myError) Error() string {
    return fmt.Sprintf("my error: %s", m.err)
}

func retError() error {
    return &myError{errors.New("wrapped")}
}

func main() {
    var m myError
    if err := retError(); errors.As(err, &m) {
        fmt.Println("unwrapped", m.err)
    } else {
        fmt.Println(err)
    }
}

https://go.dev/play/p/I7BNk4-rDIB-围棋游戏场上的例子。如果启动,它将打印“我的错误:wrapped”而不是预期的“unwrapped wrapped”。
errors.As文档中的示例可以正常工作,但我似乎不明白我做错了什么--我将*myError传递给errors.As,这似乎是正确的(因为传递myError会引发死机:target must be a non-nil pointer,这是预期的)。

5cg8jx4n

5cg8jx4n1#

取代:

func retError() error {
    return &myError{errors.New("wrapped")}
}

请执行以下操作:

func retError() error {
    return myError{errors.New("wrapped")}
}

相关问题