根据规范:
接口值具有可比性。如果两个接口值具有相同的动态类型和相等的动态值,或者两者的值为 nil,则它们是相等的。
var err error var reader io.Reader
据了解,err
和reader
具有不同的动态类型(error
和io.Reader
),因此没有可比性。
fmt.Println(err == reader)
会导致编译错误:
无效操作:err == reader(错误类型与 io.Reader 不匹配)
如果是这样,为什么Println
命令对两个变量输出相同的结果?为什么两者都是nil
?
fmt.Printf("reader: %T", reader) // nil fmt.Printf("error: %T", err) // nil
编辑 reflect.TypeOf(err)
或reflect.TypeOf(reader)
也将输出nil
. 我不明白如果类型不同,为什么输出相同。
翻翻过去那场雪
相关分类