是否可以为命名类型/结构定义相等性?

2024-01-09

读完一篇后相关问题 https://stackoverflow.com/questions/20297503/slice-as-a-key-in-map关于在映射中使用切片,我对 Go 中的相等性感到好奇。

我知道可以覆盖equalsJava 的方法Object。是否有类似的方法来定义 Go 如何检查用户定义的类型/结构是否相等?如果是这样,就会有一个解决上述问题的方法。我想用interface{} values http://play.golang.org/p/8CzhmDnDLQ可能会提供解决方案,但我收到了错误消息panic: runtime error: hash of unhashable type []int.


No。您无法修改相等运算符,并且没有内置方法来添加对要使用的自定义类型的支持==句法。相反,您应该使用比较指针值reflect.DeepEqual https://golang.org/pkg/reflect/#DeepEqual.

Go 支持相等检查结构。

type Person struct {
    Name string
}

a := Person{"Bill DeRose"}
b := Person{"Bill DeRose"}

a == b // true

它不适用于指针字段(以您想要的方式),因为指针地址不同。

type Person struct {
    Friend *Person
}

a := Person{Friend: &Person{}}
b := Person{Friend: &Person{}}

a == b // false


import "reflect"

a := Person{Friend: &Person{}}
b := Person{Friend: &Person{}}

reflect.DeepEqual(a, b) // true

请记住,有一些警告。

一般来说,DeepEqual 是 Go 的 == 运算符的递归松弛。然而,如果没有一些不一致之处,这个想法是不可能实现的。具体来说,一个值有可能不等于自身,要么因为它是 func 类型(一般情况下不可比较),要么因为它是浮点 NaN 值(在浮点比较中不等于自身),或者因为它是包含此类值的数组、结构或接口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以为命名类型/结构定义相等性? 的相关文章

  • 如何访问主包之外的标志?

    We 解析标志 http golang org pkg flag FlagSet Parse当然 在 main 包中的 main go 中 然后我们有另一个包 我们想在其中读取一些标志的值 flags Args http golang or
  • 无法在 Golang 中导入本地模块

    我正在尝试导入本地模块 但无法使用以下命令导入它go mod 我最初使用以下方式构建了我的项目go mod init github com AP Ch2 GOMS 注意我的环境是go1 14我使用 VSCode 作为我的编辑器 这是我的文件
  • 是否可以将 Go 代码作为脚本运行?

    随着Go正在成为 系统 的语言 我想知道是否可以将 Go 代码作为脚本运行而不编译它 有可能这样做吗 动机 因为有关于动机的问题 取自如何使用 Scala 作为脚本语言 http alvinalexander com scala how t
  • 带有导出字段的私有类型

    在 Go 教程的第二天有这样的练习 为什么拥有带有导出字段的私有类型会很有用 例如 package geometry type point struct X Y int name string 请注意point是小写的 因此不会导出 而字段
  • Golang:使用像 Node.js 中那样的可读流从 PostgreSQL 数据库中选择几百万行

    我有大约 5000 万行的 PostgreSQL 表 我想编写 Go 代码来从该表中选择大约 100 万行 并以有效的方式处理它们 上次我使用了nodejs和这个NPM模块pg 查询流 https www npmjs com package
  • SQL Server 文本数据类型最大长度 = 65,535?

    我正在使用的软件使用文本字段来存储 XML 根据我的在线搜索 文本数据类型应该包含 2 31 1 个字符 目前 SQL Server 每次都会将 XML 截断为 65 535 个字符 我知道这是由 SQL Server 引起的 因为如果我直
  • 限制 FormFile 中的文件大小

    我让用户使用 FormFile 上传文件 我应该在什么时候检查文件大小是否太大 当我做 file header fileErr r FormFile file 文件对象已经创建 那么我是否已经产生了读取整个文件的成本 https golan
  • JavaScript 比较中应使用哪个等于运算符(== 与 ===)?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我在用着JSLint http en wikipedia org wiki JSLint
  • 正则表达式不匹配

    我正在尝试以下代码 d byte x01 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x80J x13 x80SQ x80L xe0 x80 x92 x80L x80H xe0 r regexp Must
  • K8s更改配置映射并更新应用程序日志级别

    我想更改在 K8S 上运行的 Golang 应用程序的登录配置 我在本地尝试了以下代码 它按预期工作 我正在使用 viper 来监视配置文件更改 这是带有日志配置的配置图 apiVersion v1 kind ConfigMap data
  • 将带有两层分隔符的字符串转换为字典 - python

    给定一个字符串 s x t1 ny t2 nz t3 我想转换成字典 sdic x 1 y 2 z 3 我通过这样做让它工作 sdic dict tuple j split t for j in i for i in s split n F
  • 如何检测数据库类型?

    我需要确保我连接的数据库是 MySQL 而不是 PostgreSQL 或 Microsoft SQL Server 我怎样才能知道正在使用哪种类型的数据库 第一个提示可能是如果您尝试使用 mySQL 数据库驱动程序连接到 PostgreSQ
  • golang导入结构体指针

    好的 我有一个主包和一个 http 处理程序包 本质上我想做的是设置一个全局结构 这样我就可以随时调用该结构中的信息 我尝试的示例的基本概要如下 主包导入处理函数 主包调用handlerfunc Handlerfunc 将 http Res
  • Bash脚本无法执行Go命令

    我正在尝试编写一个 bash 脚本来自动在不同的目录中运行 go get install 相关部分在这里 cd web go get cd web go install cd services go get cd services go i
  • 自定义结构:类型不符合“可解码”协议

    我希望能够保存一个Custom struct to UserDefaults但为此我需要它Codable 我尝试过这样的 struct Wishlist Codable var name String var image UIImage v
  • 指向函数中结构体数组的指针

    我的指针有问题 我想用一个函数读取一个二进制文件 然后在 main c 文件中使用读取的数据 问题是我必须传递一个指向结构数组的指针才能使用 main 中的数据 代码是 define TMOLDEO 8 define TAM 41 stru
  • 从父类返回子类

    我有一个构建器类 它从大多数方法返回自身以允许菊花链 为了使此功能适用于子类 我希望父方法返回子类的实例 以便子方法可以链接到末尾 public class BaseBuilder
  • 易失性结构=结构不可能,为什么?

    struct FOO int a int b int c volatile struct FOO foo int main void foo a 10 foo b 10 foo c 10 struct FOO test foo return
  • SSIS Excel 导入强制错误的列类型

    我正在尝试使用 SSIS 将电子表格导入到我们的数据库中 由于某种原因 当其中两列包含字符数据时 SSIS 希望相信它们的类型为 Double 我尝试将列重新映射为 nvarchar 255 但它仍然不想选择它认为是双精度的数据 因为其中有
  • Golang - 更改 Windows 上的构建工作路径

    我正在使用 SublimeText3 GoSublime 插件 在 Windows 8 上测试简单的 Go 程序 go run v example go 在运行之前它正在内部编译 应用程序数据 本地 温度 目录 我的防病毒程序认为这是病毒并

随机推荐

  • 使用 jersey 客户端将 JSON 响应读取为字符串

    我正在使用 jersey 客户端将文件发布到 REST URI 该 URI 以 JSON 形式返回响应 我的要求是将响应读取为字符串 JSON 以下是将数据发布到 Web 服务的代码段 final ClientResponse client
  • C# UTF8 输出保持编码字符完整

    我有一个非常简单的问题 我似乎无法理解 我有一个正确编码的 UTF8 String 我使用 Json NET 解析为 JObject 摆弄一些值并将其写入命令行 保持编码字符完整 除了保持编码字符完整之外 一切都很好 Code var js
  • Ajax 将“Map”对象传递给 Spring MVC 控制器

    Spring MVC 似乎不知道如何将 javascript 地图 映射到 Java 地图对象 在 Web UI 中 例如 foo jsp
  • Selenium 未填写表单上的密码属性

    我有一个非常简单的硒脚本来尝试调试我遇到的问题 我所做的就是填写用户名 然后填写密码 然后检查我输入的密码是否在密码字段中 我这样做的原因是我无法让它进行一般身份验证 当密码正确时始终会出现 密码不正确问题 表单 html
  • ec2:RunInstances 的最低 IAM 策略

    我正在尝试缩小运行预定义机器映像的最小策略范围 该映像基于两个快照 我只想启动 m1 medium 实例类型 在此基础上并在以下方面的帮助下这一页 http docs aws amazon com AWSEC2 latest APIRefe
  • 为 ng-bootstrap modal (NgbModal) 编写单元测试 [Angular 6]

    我在为应用程序中的确认模式编写单元测试时遇到一些问题 这是我想测试的一段代码 confirmModal prompt Are you sure title Confirm Observable
  • 硬盘读取性能问题

    我有一个 C 程序 它从硬盘读取文件并对文件中的数据进行一些处理 我正在使用标准 Win32 API 来读取文件 我的问题是这个程序有时速度非常快 然后突然减慢到之前速度的 1 6 如果我在多次运行中一次又一次地读取相同的文件 那么通常第一
  • Azure Function V3 无法加载文件或程序集“Microsoft.Extensions.DependencyModel,版本=3.1.6.0”

    我们尝试使用 DependencyContext Default RuntimeLibraries 来获取所有项目程序集并将我们想要的类型加载到 ServiceCollection 中 此代码在 asp net core Web 应用程序上
  • 如何在 Unix 中交换文件名?

    有什么方法可以在不使用临时变量的情况下快速完成此操作 有内置函数吗 编辑 谢谢你们的回答 看起来我需要澄清我的问题 但在大多数情况下 你们假设是正确的 有两个文件 并且文件名是相反的 文件 A 的名称为 B name file 文件 B 的
  • 如何从另一个应用程序访问字符串资源

    我有一个应用程序 A 和 B 应用程序 假设我在应用程序 A 中有一个字符串资源 lt string name abc gt ABCDEF lt string gt 如何从 B 中的活动访问 abc 的值 我尝试了以下方法 try Pack
  • 在 C# 中异步处理项目队列

    我正在尝试创建一个处理工作队列的系统 该系统具有以下规格 该系统有两个组件 工作分配器和工作人员 同时运行的worker数量有一个设定的上限 该上限大于一 为了避免同一任务被执行两次的问题 只有一个工作分配者 您会使用什么设计来创建这样的系
  • Windows 上 Sublime Text 2 的键盘列选择

    我一直在尝试通过 Windows 上的键盘绑定来选择列 The 默认 Windows sublime 键盘映射说 keys ctrl alt up command select lines args forward false keys c
  • 为什么 IEnumerable 会丢失更新的数据?

    你能向我解释一下为什么执行以下代码后Selected属性未更新为true The ListItem使用的类型来自System Web UI WebControls命名空间并且是一个类 不是结构 我相信FirstOrDefault函数返回对实
  • Android:以编程方式将 apk 复制到 /system/app

    我正在尝试从我的 java 代码安装系统应用程序 但到目前为止 我还没有取得任何成功 以下是我到目前为止所做的 我的设备已植根 我的 安装程序 应用程序作为系统应用程序安装 手动将其复制到 system app 我已经使用平台密钥签署了安装
  • mediaelement.js - RTMP 支持音频流?

    目前是否支持使用本机 HTML5 或 Flash 回退与 MediaElement 通过 RTMP 流式传输音频 我看到视频标签 data mejsoptions 属性中使用 flashStreamer 选项看起来像是对视频的支持 我知道你
  • 使用 Mockito-core 创建最终类的模拟?

    I 在github上找到 https github com relayr android sdk blob master tests src androidTest java io relayr ble service OnBoarding
  • GWT - 具有简单寻呼机问题的单元格

    单元格表分页行为异常 检查 GWT 的示例http gwt google com samples Showcase Showcase html CwCellTable http gwt google com samples Showcase
  • 如何在表单寄存器中添加一些文本字段(laravel 生成器 infyom)?

    我在这里阅读了教程 http labs infyom com laravelgenerator docs 5 3 installation http labs infyom com laravelgenerator docs 5 3 ins
  • 为什么视频观看速度这么慢?

    我在我的应用程序中放置了一个视频视图 它工作正常 但是当您打开页面时 它需要永远加载 缓冲 无论如何我可以解决这个问题吗 我的意思是这是一个3秒视频 加载时间应该不会太长 正确的 code package jslsoftware co nr
  • 是否可以为命名类型/结构定义相等性?

    读完一篇后相关问题 https stackoverflow com questions 20297503 slice as a key in map关于在映射中使用切片 我对 Go 中的相等性感到好奇 我知道可以覆盖equalsJava 的