美文网首页
go语言 结构体比较问题

go语言 结构体比较问题

作者: __robin | 来源:发表于2021-04-15 15:06 被阅读0次

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

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

相关文章

  • go语言 结构体比较问题

    以下代码中有三种结构体比较,能否编译通过呢 编译结果如下: golang中结构体的比较有以下规则: 只有相同类型的...

  • Golang 学习笔记四 结构体

    一、结构体 《快学 Go 语言》第 8 课 —— 结构体1.结构体类型的定义结构体和其它高级语言里的「类」比较类似...

  • golang继承与接口

    继承 结构体 Go语言的结构体(struct)和其他语言的类(class)有同等的地位,但Go语言放弃了包括继 承...

  • 结构体

    结构体初识 结构体指针 结构体的匿名字段 结构体嵌套 Go语言中的OOP

  • 《Go语言四十二章经》第十八章 Struct 结构体

    《Go语言四十二章经》第十八章 Struct 结构体 作者:李骁 18.1结构体(struct) Go 通过结构体...

  • Go 语言程序设计——面向对象编程(5)

    结构体 Go 语言中创建自定义结构体最简单的方式是基于 Go 语言的内置类型创建 自定义类型也可以基于结构体创建,...

  • Go语言探索 - 10(原创)

    上一篇文章主要学习了Go语言的结构体以及结构体指针,本篇文章主要学习Go语言的切片以及Map。 Go语言数组的长度...

  • Go Struct

    Go语言通过自定义结构的方式来实现新的类型,结构体是类型中带有成员的复合类型。 Go语言使用结构体和结构体成员来描...

  • Go结构体、方法、接口

    1 结构体 Go语言中没有“类”的概念,也不支持像继承这种面向对象的概念。但是Go语言的结构体与“类”都是复合结构...

  • 12-Go语言结构体

    结构体 结构体的基本概念 什么是结构体Go语言中的结构体几乎和C语言中的结构体一模一样都需要先定义结构体类型, 再...

网友评论

      本文标题:go语言 结构体比较问题

      本文链接:https://www.haomeiwen.com/subject/frwdlltx.html