package main
import (
"fmt"
)
func main() {
var (
a int
b int64
)
a = 1
b = 1
fmt.Println(equal(a, b)) // false
}
func equal(a, b interface{}) bool {
return a == b
}
原因:
Golang 是一个强类型的语言。
上述的a=1,实际上a表示的是一个int类型的1。
上述的b=1,实际上b表示的是一个int64类型的1。
在进行比较的时候,Golang不会向其他语言如java一般作装箱拆箱这样的操作。
值类型的比较通常会做两个比较:
类型比较。
值比较。
因为上述a,b类型不一致,即使他们的数值都是1,但是通过interface{}传入方法equal进行比较时,也会返回false。
事实上,如果我们不引入equal,使用interface{}接收,Golang的codecheck会直接告知你类型不匹配。如下:
评论