感兴趣的读者可以点击在线验证

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会直接告知你类型不匹配。如下: