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 或约定。
一起交流
分享经验,让问题更进一步
讨论,从你的观点开始
还没有回复,欢迎补充经验或分享不同的思路。