基本类型比较

直接使用比较符号

对象比较

涉及Value和type两个值,目前可用反射

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
func DeepEqual(x, y interface{}) bool {
	if x == nil || y == nil {
		return x == y
	}
	v1 := ValueOf(x)
	v2 := ValueOf(y)
	if v1.Type() != v2.Type() {
		return false
	}
	return deepValueEqual(v1, v2, make(map[visit]bool), 0)
}

channel比较

不仅涉及value、type比较,还涉及是否为相同make比较

1
2
3
4
5
6
7
ch0 := make(chan int)
ch1 := make(chan int)
ch2 := ch1 //引用赋值,共用make

fmt.Println("ch0 == ch1", (ch0 == ch1))//false
fmt.Println("ch1 == ch2", (ch1 == ch2)) //ture
fmt.Println(reflect.DeepEqual(ch0, ch1)) //false

参考

https://medium.com/learning-the-go-programming-language/comparing-values-in-go-8f7b002e767a