This topic created in 1553 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
|