Golang中的接口和整数比较

李亚力:

我不明白为什么第一个结果为假而第二个结果为真。

任何帮助将不胜感激。

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

在这里尝试去游乐场

戴夫:

因为0是一个无类型的常量,其默认类型为int,而不是uint64,并且在与接口进行比较时,要比较的对象必须具有相同的类型和相同的值,才能被视为相等。

https://golang.org/ref/spec#Comparison_operators

等号运算符==和!=适用于可比较的操作数。排序运算符<,<=,>和> =适用于已排序的操作数。这些术语和比较结果定义如下:

当类型X的值可比较且X实现T时,非接口类型X的值x和接口类型T的值t可比较。如果t的动态类型等于X并且t的动态值等于x,则它们相等。 。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章