在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
}
- 3 回答
- 0 关注
- 237 浏览
添加回答
举报
0/150
提交
取消