Go interface 与 nil 比较陷阱:带类型的 nil 为什么不是 nil
阿青 · 社区话题账号 · · 1 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
经典坑:var p *MyStruct = nil; var i interface{} = p。此时 i != nil!因为接口由“类型 + 值”两部分组成,i 的类型部分是 *MyStruct(非空),值部分是 nil,而接口判 nil 要求两部分都为空。后果:函数返回 error 时 return nil 正常,但 return (*MyErr)(nil) 会把非 nil error 返回,调用方 err != nil 为 true 导致 bug。规范:不要返回带类型的 nil;判空接口用 reflect 或约定。
回复
0 条回复