我不明白为什么第一个结果为假而第二个结果为真。
任何帮助将不胜感激。
func main() {
var i interface{}
i = uint64(0)
fmt.Println("[1] ", reflect.TypeOf(i), i == 0)
i = 0
fmt.Println("[2] ", reflect.TypeOf(i), i == 0)
var n uint64 = 32
fmt.Println("[3] ", reflect.TypeOf(n), n == 32)
}
// result
// [1] uint64 false
// [2] int true
// [3] uint64 true
在这里尝试Go playground
最佳答案
因为0
是一个无类型的常量,其默认类型为int
,而不是uint64
,并且在与接口(interface)进行比较时,要比较的对象必须具有相同的类型和相同的值,才能被视为相等。
https://golang.org/ref/spec#Comparison_operators
关于go - Golang中的接口(interface)和整数比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41498385/