为了账号安全,请及时绑定邮箱和手机立即绑定

期望 nil 但得到一个 nil 值作为回报的接口,这应该是 nil

期望 nil 但得到一个 nil 值作为回报的接口,这应该是 nil

Go
慕神8447489 2021-08-30 14:35:53
在https://play.golang.org/p/sl12vfS9vP运行它package mainimport "fmt"func main() {    err := run()    if err != nil {        fmt.Printf("%#v", err)    }}func run() (err error) {    return check()}func check() *Result {    return nil}type Result struct {    message string}func (result *Result) Error() string {    return result.message}
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

这在FAQ和Go Traps网站上有讨论:


仅当内部值和类型都未设置时,接口值才为零 (nil, nil)。特别是,一个 nil 接口将始终持有一个 nil 类型。如果我们将 *int 类型的指针存储在接口值中,则无论指针的值如何,内部类型都将是 *int:(*int, nil)。因此,即使内部指针为零,这样的接口值也将是非零的。


(……)


要将正确的 nil 错误返回给调用者,该函数必须返回一个显式的 nil:


func returnsError() error {

    if bad() {

        return ErrBad

    }

    return nil

}


查看完整回答
反对 回复 2021-08-30
  • 3 回答
  • 0 关注
  • 237 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信