This topic created in 1566 days ago, the information mentioned may be changed or developed.
func test() error {
return nil
}
other code....
err := func()
if nil != err {
//log.println(err)
}
函数里面是一致返回的 nil ,神奇的是单步调试的时候 err 的值居然不为 nil ,但是加上打印 err ,err 就变成了 nil 并不会进入 if 逻辑。
8 replies 2022-02-17 17:24:07 +08:00  | | 1 sadfQED2 Feb 17, 2022 via Android 1 这并不是编译器错误,搜索“go nil!=nil” |
 | | 2 SingeeKing Feb 17, 2022 盲猜中间存在有类型的 error ,Go 中任何 interface 的 nil 必须同时满足动态类型为 nil 和动态值也为 nil |
 | | 3 SingeeKing Feb 17, 2022 package main
import "fmt"
type AnError struct{}
func (AnError) Error() string { return "some error" }
func DoSomething() *AnError { return nil }
func main() { var err error = DoSomething()
fmt.Println(err, err == nil) // nil false } |
 | | 5 hzzhzzdogee Feb 17, 2022 经典问题, interface 的 类型信息 和 值, 两者都为 nil, 才会 interface == nil. 简单说就是 err != nil 是因为有类型信息. |
 | | 6 wlgq2 Feb 17, 2022 哈哈,楼上都猜错了,正确答案是,调试器或者 JetBrains 问题 |
 | | 8 cyrivlclth Feb 17, 2022 我重新尝试了你的代码,err 一直都是 nil ,只是调试器会提示 invalid interface type: could not found str field |