goalng 结构体比较问题


本文摘自网络,作者,侵删。

以下代码中有三种结构体比较,能否编译通过呢

package main

import  "fmt"

func main() {

    sn1 := struct {
        age  int
        name string
    }{age: 11, name: "qq"}

    sn2 := struct {
        age  int
        name string
    }{age: 11, name: "qq"}

    if sn1 == sn2 {
        fmt.Println("sn1 == sn2")
    }

    sq1 := struct {
        age  int
        name string
    }{age: 11, name: "qq"}

    sq2 := struct {
        name string
        age  int
    }{age: 11, name: "qq"}

    if sq1 == sq2 {
        fmt.Println("sq1 == sq2")
    }

    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")
    }
}

编译结果如下:

./main.go:34:9: invalid operation: sq1 == sq2 (mismatched types struct { age int; name string } and struct { name string; age int })
./main.go:48:9: invalid operation: sm1 == sm2 (struct containing map[string]string cannot be compared)

golang中结构体的比较有以下规则:

  1. 只有相同类型的结构体才可以比较
  2. 结构体必须字段属性和顺序都相同,才是相同结构体
  3. 结构体中有不可比较类型,如map,slice,则结构体不能用==比较

可以使用reflect.DeepEqual进行比较

    if reflect.DeepEqual(sm1, sm2) {
        fmt.Println("sm1 == sm2")
    } else {
        fmt.Println("sm1 != sm2")
    }

本文来自:简书

感谢作者:__robin

查看原文:goalng 结构体比较问题

相关阅读 >>

一文搞懂 Go 超时控制

Golang中方法的receiver为指针和不为指针有什么区别

手撸Golang 结构型设计模式 桥接模式

Golang能开发什么?

Golang变量、常量

详解 Go 中的不可变类型

你知道Go程序的基本要素吗

深度解析Golang sync.once源码

毛剑:bilibili 的 Go 服务实践(上篇)

手撸Golang Go与微服务 chatserver之2

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...