常见的有 bool、数值型、字符、指针、数组等,这些是可比较的。。
像切片、map、函数等是不能比较的
结构体比较:
1:结构体只能比较是否相等,但是不能比较大小
2:相同类型的结构体才能够进行比较,结构体是否相同不但与属性类型有关,还与属性顺序相关
3:如果 struct 的所有成员都可以比较,则该 struct 就可以通过 == 或 != 进行比较是否相等,比较时逐个项进行比较,如果每一项都相等,则两个结构体才相等,否则不相等;
看例子:
sn1 := struct {
age int
name string
}{age: 11, name: "qq"}
sn2 := struct {
age int
name string
}{age: 11, name: "qq"}
sn3 := struct {
name string
age int
}{age: 11, name: "qq"}
if sn1 == sn2 {
fmt.Println("sn1 == sn2")
}
sn1和sn2 是相等的 ,但是sn1 和 sn3 就不相等了!!!!
在来一个:
sm1 := struct {
age int
m map[string]string
}{age: 11, m: map[string]string{"a": "1"}}
sm2 := struct {
age int
m map[string]string
}{age: 11, m: map[string]string{"a": "1"}}
if sm1 == sm2 {
fmt.Println("sm1 == sm2")
}
编译不通过 invalid operation: sm1 == sm2。。。
数组比较
数组是值类型,可比较,另外一方面,数组的长度也是数组类型的组成部分
a := [2]int{5, 6}
b := [3]int{5, 6}
if a == b {
fmt.Println("equal")
} else {
fmt.Println("not equal")
}
编译时compilation error, a 和 b 是不同的类型,是不能比较的,所以编译错误。
切片比较
切片是不能比较的!!!!
fmt.Println([]int{1} == []int{1})
所以这行代码会报错!!!!!