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 结构体比较问题

相关阅读 >>

Golang如何调试

[concurrent-map]-并发map在Go中的使用

Go1.16 embed 实践

Golang实现php常用函数

Go 语言和 java 比较?

使用 Google/wire 对 Go 项目进行依赖注入

锁的使用场景主要涉及到哪些?读写锁为什么会比普通锁快【Golang 入门系列十六】

Golang指针的使用限制和unsafe.pointer的突破之路

[Golang]从sync.waitgroup看内存对齐

Go语言函数值传递值

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




打赏

取消

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

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

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

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

评论

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