Golang “可比较” 总结

常见的有 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})

所以这行代码会报错!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值