我尝试使用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
,这是预期的)。
1条答案
按热度按时间5cg8jx4n1#
取代:
请执行以下操作: