【发布时间】:2019-01-02 08:28:25
【问题描述】:
接口值具有可比性。两个接口值相等,如果 它们具有相同的动态类型和相同的动态值,或者如果两者都有 值为零。
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
EDIT reflect.TypeOf(err)或reflect.TypeOf(reader)也将输出nil。我不明白如果类型不同,为什么输出是相同的。
【问题讨论】:
标签: go interface comparison