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

在https://play.golang.org/p/sl12vfS9vP运行它


package main


import "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

}


慕神8447489
浏览 239回答 3
3回答

繁花不似锦

这在FAQ和Go Traps网站上有讨论:仅当内部值和类型都未设置时,接口值才为零 (nil, nil)。特别是,一个 nil 接口将始终持有一个 nil 类型。如果我们将 *int 类型的指针存储在接口值中,则无论指针的值如何,内部类型都将是 *int:(*int, nil)。因此,即使内部指针为零,这样的接口值也将是非零的。(……)要将正确的 nil 错误返回给调用者,该函数必须返回一个显式的 nil:func returnsError() error {    if bad() {        return ErrBad    }    return nil}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go