RSS
菜单

Go interface 与 nil 比较陷阱:带类型的 nil 为什么不是 nil

经典坑: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 或约定。

下载推广海报

圈内讨论推广海报

《Go interface 与 nil 比较陷阱:带类型的 nil 为什么不是 nil》完整推广海报
一起交流

全部回复 0

分享经验,让问题更进一步

讨论,从你的观点开始

还没有回复,欢迎补充经验或分享不同的思路。