接口返回 nil 的陷阱
Go 里 interface 的 nil 判断容易踩坑。一个带具体类型的 nil 指针赋给 interface 后,interface 本身并不等于 nil。
var e *MyError = nil
var err error = e
fmt.Println(err == nil) // false错误处理里要避免返回带类型的 nil。构造错误时要么返回明确的 error,要么直接返回 nil,不要让 nil 指针穿过 interface 边界。
这个问题常出现在自定义错误类型和封装库中。测试时要覆盖成功路径的 err == nil 判断,不只看函数有没有 panic。
版权申明
本文系作者 @blogger 原创发布在接口返回 nil 的陷阱。未经许可,禁止转载。
评论
-- 评论已关闭 --
全部评论