package main import "fmt" func main() { //接口的相等性比较 type a interface { aaa() int bbb() int } type b interface { bbb() int aaa() int } var x a var y b fmt.Println(x == y) //true 对于接口,只要方法列表相同,即使顺序不同也是同一个接口,可以互相替换 //结构体的相等性比较 type aa struct { aaa int bbb int } type bb struct { aaa int bbb int } var xx aa var yy bb //fmt.Println(xx == yy) 不同的命名结构体相互比较,无法通过编译, 命名结构体 只要不是同一个名字的结构体即使结构相同也是不同的类型,不可互相替换 fmt.Println(xx, yy) x1 := aa{1, 2} x2 := aa{1, 2} fmt.Println(x1 == x2) //true , 对于相同类型的结构体,只要字段值全部相同,那么这两个结构体值相等 //数组的相等性比较 y1 := [4]int{1, 2, 3, 4} y2 := [4]int{1, 2, 3, 4} y3 := [3]int{1, 2, 3} fmt.Println(y1 == y2) //true , 对于相同长度的数组,相同索引位置的值都相等,那么这两个结构体值相等 fmt.Println(y1, y3) // fmt.Println(y1 == y3) 不同长度的数组相等性相互比较,无法通过编译 //切片的相等性比较 z1 := []int{1, 2, 3} z2 := []int{1, 2, 3} z3 := z1 fmt.Println(z1, z2) // fmt.Println(z1 == z2) 切片之间的相等性比较,无法通过编译,operation == not defined on []int fmt.Println(z3) // fmt.Println(z1 == z3) 比较引用的相等性也不能通过编译 z4 := &z1 z5 := &z1 fmt.Println(z4 == z5) //同类型的指针是可以比较的,比较的是他们的地址是否相同,不同类型的指针也不能比较相等 //由于go不支持运算符重载,> < >= <= 只能用于数值和字符串类型 }