![]() | 1 sadfQED2 2022-02-17 13:05:57 +08:00 via Android ![]() 这并不是编译器错误,搜索“go nil!=nil” |
![]() | 2 SingeeKing PRO 盲猜中间存在有类型的 error ,Go 中任何 interface 的 nil 必须同时满足动态类型为 nil 和动态值也为 nil |
![]() | 3 SingeeKing PRO 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 } |
![]() | 4 jasonkayzk 2022-02-17 14:32:10 +08:00 没特别注意过这一点,学习了! |
![]() | 5 hzzhzzdogee 2022-02-17 14:59:09 +08:00 经典问题, interface 的 类型信息 和 值, 两者都为 nil, 才会 interface == nil. 简单说就是 err != nil 是因为有类型信息. |
![]() | 6 wlgq2 OP 哈哈,楼上都猜错了,正确答案是,调试器或者 JetBrains 问题 |
![]() | 7 cyrivlclth 2022-02-17 17:22:24 +08:00 未能复现 |
![]() | 8 cyrivlclth 2022-02-17 17:24:07 +08:00 我重新尝试了你的代码,err 一直都是 nil ,只是调试器会提示 invalid interface type: could not found str field |