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。

分类: Go 语言笔记 标签: Go 工程实践 错误处理

评论

-- 评论已关闭 --

全部评论