如何比较两个结构体、切片或映射是否相等?

2023-12-12

我想检查两个结构体、切片和映射是否相等。

但我在使用以下代码时遇到了问题。请参阅我在相关行的评论。

package main

import (
    "fmt"
    "reflect"
)

type T struct {
    X int
    Y string
    Z []int
    M map[string]int
}

func main() {
    t1 := T{
        X: 1,
        Y: "lei",
        Z: []int{1, 2, 3},
        M: map[string]int{
            "a": 1,
            "b": 2,
        },
    }

    t2 := T{
        X: 1,
        Y: "lei",
        Z: []int{1, 2, 3},
        M: map[string]int{
            "a": 1,
            "b": 2,
        },
    }

    fmt.Println(t2 == t1)
    //error - invalid operation: t2 == t1 (struct containing []int cannot be compared)

    fmt.Println(reflect.ValueOf(t2) == reflect.ValueOf(t1))
    //false
    fmt.Println(reflect.TypeOf(t2) == reflect.TypeOf(t1))
    //true

    //Update: slice or map
    a1 := []int{1, 2, 3, 4}
    a2 := []int{1, 2, 3, 4}

    fmt.Println(a1 == a2)
    //invalid operation: a1 == a2 (slice can only be compared to nil)

    m1 := map[string]int{
        "a": 1,
        "b": 2,
    }
    m2 := map[string]int{
        "a": 1,
        "b": 2,
    }
    fmt.Println(m1 == m2)
    // m1 == m2 (map can only be compared to nil)
}

http://play.golang.org/p/AZIzW2WunI


您可以使用反映.DeepEqual,或者您可以实现自己的函数(其性能比使用反射更好):

http://play.golang.org/p/CPdfsYGNy_

m1 := map[string]int{   
    "a":1,
    "b":2,
}
m2 := map[string]int{   
    "a":1,
    "b":2,
}
fmt.Println(reflect.DeepEqual(m1, m2))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何比较两个结构体、切片或映射是否相等? 的相关文章

随机推荐

  • 如何在 Java 中使用密码保护压缩的 Excel 文件?

    我有一个关于保护 Excel 文件的密码的问题 情况是 我有一个 zip 文件 其中有一个 Excel 文件 我需要编写一个Java程序 以密码保护Excel文件 因此 用户应该能够解压缩该文件 zip 文件不需要受密码保护 但是 Exce
  • 如何在没有 EULA 的情况下启动 ChromeDriver.exe?

    我正在学习使用 Selenium v2 20 以领先于我们的一些程序员 他们很快将用它创建一些浏览器测试 我想在陷阱出现之前发现它们 而我无意中发现了一个 当我创建 ChromeDriver 时 它总是会弹出 Google Chrome E
  • 在 AS3 中从库加载和卸载内容

    我正在做一个 Flash 项目 但我对 ActionScript 很陌生 我在主页上有一个菜单 我想在单击菜单项时显示其他页面 我知道如何从库加载影片剪辑 但我不知道如何指定它们在屏幕上的位置以及如何使它们出现在特定层中 当我点击菜单的另一
  • 如果我们启用僵尸对象,所有弱引用都会被清空吗?

    通常 如果一个对象被释放 所有弱引用都将被清空 如果我们启用僵尸对象会怎么样 产品 gt 编辑方案 gt 启用僵尸对象 弱引用也会被置零吗 否则 在启用僵尸对象时会出现正常情况下不会发生的错误 正如其中一个答案所说 我强烈怀疑弱引用将被消除
  • 如何将秒转换为小时、分钟和秒?

    我有一个以秒为单位返回信息的函数 但我需要以小时 分钟 秒的形式存储该信息 有没有一种简单的方法可以在Python中将秒转换为这种格式 您可以使用datetime timedelta功能 gt gt gt import datetime g
  • 如何让 PHP 在出现错误时生成回溯?

    尝试使用 PHP 的默认仅当前行错误消息来调试 PHP 是可怕的 当产生错误时 如何让 PHP 产生回溯 堆栈跟踪 我的用于安装生成回溯的错误处理程序的脚本
  • 加载 jasperreports 的 .jrxml 文件

    在我的项目中 我将 jrxml 文件存储在名为 com bio ofm mnu views reports jasperReports 的包中 当我尝试加载 jrxml 时出现以下错误 net sf jasperreports engine
  • 将外部 SVG 文件加载到变量中并附加到 html

    我正在尝试用该 SVG 的内容替换嵌入 IMG 标签中的 SVG 图像 并将其内联输出 换句话说 将给定 IMG SRC 属性的 SVG 文件内容加载到变量中 并将其作为内联 SVG 注入 HTML 如下所示 else if type ty
  • 获取日期时间范围内的教室可用时间

    我正在使用 Oracle 11g 我遇到了这个问题 我还想不出任何想法来解决它 我有一张桌子 教室里有人 我需要找到的是日期时间范围之间的可用小时数 例如 我有A B C房间 占用教室表如下 Classroom start end A 10
  • 逐行循环遍历 char 数组

    我知道如何通过使用 fopen fgets 等读入 FILE 来逐行循环文件 但是我如何使用纯 C 逐行查看 char 数组 我用谷歌搜索了很多 只能找到从文件中读取的内容 include
  • E/MediaPlayer:错误(1,-19)

    我正在创建一个简单的音板 以便在用户单击按钮时播放声音 问题是 如果按钮按得足够多 通常大约 10 次 它最终会停止播放并显示错误E MediaPlayer error 1 19 我究竟做错了什么 我的播放声音的代码 private voi
  • React Native在调用/共享热点时检测IOS状态栏高度?

    ios 通话或分享个人热点时状态栏高度发生变化且与视图重叠 如何检测状态栏高度发生变化 我遇到过这个挑战 但还没有在 stackoverflow github 问题上找到答案 我提出了自己的解决方案 并将其发布 这样可以为其他人节省一些时间
  • 在 Mathematica 中计算自定义分布的期望

    这个问题建立在我在之前的问题上得到的很好的答案的基础上 能否在 Mathematica 中扩展 PDF CDF FindDistributionParameters 等功能 首先 我有两个自定义发行版的 PDF 和 CDF nlDist 和
  • 如何比较地图的身份或本例中发生了什么?

    我正在尝试比较两张地图的身份 package main import fmt func main a map int map int int 1 2 2 b a 1 c a 1 I can t do this if b c because
  • Android 套接字连接中出现错误“null”[重复]

    这个问题在这里已经有答案了 我想做什么 我正在尝试构建一个测试应用程序 目前只是通过套接字连接在 Android 手机 4 2 2 作为客户端 上的应用程序和在 pc windows 8 作为服务器 上运行的 java 应用程序之间建立连接
  • 如何在 VS2012 下使用静态 MSVC 运行时静态构建 Qt 4.8/5.2,并支持 Windows XP?

    我想在 VS2012 下制作 Qt 4 8 5 2 的完全静态构建 包括静态运行时库 并针对 Windows XP 系统 Qt 不支持开箱即用 因为即使是 Qt 的静态构建也使用动态链接的 MSVC 运行时 这是一个规范问题 提供了成功构建
  • 锁定 main() 线程

    不太确定这里的术语 但我基本上有我的应用程序的 main 线程 它启动并调用两个线程 一个线程设置事件处理程序以等待特定注册表项更改 而另一个线程启动计时器每 5 分钟左右写入对 xml 文件所做的任何更改并连续运行 我遇到的问题是 一旦调
  • Leaflet + Polymer 2 地图加载时带有扭曲的图块,但适用于非聚合物代码

    UPDATE 我现在已将这个问题复制到Plunker 我确实检查了建议的重复问题 答案是不正确或缺少 CSS 文件 我已经导入了 CSS 和 JS v1 3 4 如中所述传单快速入门 Plunker 显示 CSS 包含在元素的 Shadow
  • OpenGL 中的长宽比拉伸

    我在使用全屏模式时遇到一些问题 我可以将窗口设置为 800x600 但是当我全屏显示该分辨率时 它会拉伸 我认为这是因为纵横比的变化 我怎样才能解决这个问题 Edit 1 这是我所看到的情况的屏幕截图 左 800x600 右 1366x76
  • 如何比较两个结构体、切片或映射是否相等?

    我想检查两个结构体 切片和映射是否相等 但我在使用以下代码时遇到了问题 请参阅我在相关行的评论 package main import fmt reflect type T struct X int Y string Z int M map