如何比较地图的身份或本例中发生了什么?

2023-12-12

我正在尝试比较两张地图的身份

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 I get: 
    // invalid operation: b == c (map can only be compared to nil)

    // but as far as I can tell, mutation works, meaning that the 2 maps might actually be identical
    b[3] = 3

    fmt.Println(c[3]) // so mutation works...


    fmt.Printf("b as pointer::%p\n", b)
    fmt.Printf("c as pointer::%p\n", c) 

    // ok, so maybe these are the pointers to the variables b and c... but still, those variables contain the references to the same map, so it's understandable that these are different, but then I can't compare b==c like this
    fmt.Printf("&b::%p\n", &b)
    fmt.Printf("&c::%p\n", &c)  

    fmt.Println(&b == &c)
}

这会产生以下输出:

3
b as pointer::0x442280
c as pointer::0x442280
&b::0x40e130
&c::0x40e138
false

让我特别困惑的是,虽然b as pointer::0x442280 and c as pointer::0x442280似乎具有相同的值,这确实证实了我的怀疑,即这些变量以某种方式指向同一个字典。

那么有谁知道我怎样才能做到这一点b and c是“同一个对象”吗?


不漂亮,但你可以使用reflect.ValueOf(b).Pointer():

package main

import (
    "fmt"
    "reflect"
)

func main() {
    a := map[int]map[int]int{1: {2: 2}}

    b := a[1]
    c := a[1]

    d := map[int]int{2: 2}

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

如何比较地图的身份或本例中发生了什么? 的相关文章

  • GoLang 中的 HTML 部分

    我刚刚开始使用 Go 我想用它创建一个网络应用程序 我现在尝试的是以handlebarsjs 式的方式使用模板 我想将页眉和页脚从主页中取出 以便可以将它们注入到每个网页上 我当前的设置应该是解析主页 页眉和页脚 HTML 文件并缓存它们
  • 将产生 goroutine 的 golang 方法

    据我所知 如果 goroutine 太忙 它们会阻止其他 goroutine 运行 对我来说 这意味着我的应用程序的性能和响应能力可能取决于我知道哪些库方法将控制其他 goroutine 例如通常是 Read 和 Write 有什么方法可以
  • Go 编译器有窗口化设置选项吗?

    我正在使用 Go 6g 编译 GTK 应用程序 我想知道是否有编译器 链接器选项使其成为 Windows 可执行文件而不是控制台可执行文件 MinGW 有一个 mwindows 选项来实现此目的 目前我必须使用十六进制编辑器手动更改 PE
  • Diamond-Square 算法的平滑问题

    我正在使用菱形方形算法来生成随机地形 它工作得很好 除了我让这些大圆锥形状要么伸出或伸入地形 问题似乎在于 时不时会有一个点被设置得太高或太低 Here is a picture of the problem And it can be b
  • 有没有办法从另一个包访问结构体的私有字段?

    我在一个包中有一个具有私有字段的结构 package foo type Foo struct x int y Foo 另一个包 例如 白盒测试包 需要访问它们 package bar import foo func change foo f
  • 将字典写入 csv 时遇到问题,其中键作为标题,值作为列

    我有一本字典 看起来像 mydict foo 1 2 bar 3 4 asdf 5 6 我正在尝试将其写入 CSV 文件 使其看起来像 foo bar asdf 1 3 5 2 4 6 我花了最后一个小时寻找解决方案 我发现的最接近的解决方
  • 如何在Python中比较列表列表中的元素以及比较列表列表中的键?

    我有以下顺序 seq ATG ATG ATG ATG GAC GAT GAA CCT GCC GCG GCA GCT 这是一个字典键 用于存储每个密码子的氨基酸值 三联碱基 例如ATG GCT etc aminoacid TTT F TTC
  • C++ 映射插入和查找性能和存储开销

    我想存储一个映射integer的关键float内存中的值 我大约有 1 3 亿个键 相应地 也有 1 3 亿个值 我的重点是查找性能 我必须进行数百万次查找 C STL 库有一个map此类关联数组的类 我有几个问题map 存储开销是多少ma
  • 在地图类型中创建 DataFrame 分组列

    My 数据框具有以下结构 df spark createDataFrame B a 10 B b 20 C c 30 Brand Type Amount df show Brand Type Amount B a 10 B b 20 C c
  • 如何对结构切片而不是切片结构进行范围调整

    稍微玩了一下 Go HTML 模板后 我发现的所有循环模板中对象的示例都是将切片结构传递给模板 有点像这个示例 type UserList struct Id int Name string var templates template M
  • 带委托或开关的字典?

    我正在编写一个解析器 它根据某个值调用一些函数 我可以用这样的简单开关来实现这个逻辑 switch some val case 0 func0 break case 1 func1 break 或者使用代表和这样的字典 delegate v
  • 如何将长 Go 模板函数拆分为多行?

    我有一个很长的printf调用 Go 模板 例子 printf mongodb s s s s authSource admin replicaSet s readPreference nearest w majority Values r
  • 将带有 **kwargs 错误的值线程化并传递给 TypeError

    我对 Python 还很陌生 并且正在通过这篇文章研究如何使用线程来处理某些代码 Python 使用线程或队列迭代调用函数的 for 循环 https stackoverflow com questions 12868956 python
  • 子字符串和 Go 垃圾收集器

    在 Go 中获取字符串的子字符串时 不会分配新的内存 相反 子字符串的底层表示包含一个数据指针 该指针是原始字符串的数据指针的偏移量 这意味着 如果我有一个大字符串并希望跟踪一个小子字符串 则垃圾收集器将无法释放任何大字符串 直到我释放对较
  • 为什么我的代码不能根据字典解码加密字符串?

    我有一本字典 其中包含代表字母的键和值 例如一个简单的 DICT CODE b g n a p o x d t y 我收到了一个加密代码 并将该字符串转换为一个列表 其中每个项目都是一个单词 我需要根据字典中的项目来解决它 代码示例是 wo
  • python是带有字符串的运算符行为[重复]

    这个问题在这里已经有答案了 我无法理解以下行为 我正在创建 2 个字符串 并使用 is 运算符来比较它 对于第一种情况 它的工作方式有所不同 对于第二种情况 它按预期工作 当我使用逗号或空格时 它显示是什么原因False与比较is当没有使用
  • 如何构建一个不链接到 musl libc 的 go 可执行文件

    So 官方的 Go 构建容器基于 Alpine 高山用途musl https www musl libc org 作为 libc 而不是 glibc 我需要在容器中构建一个可以在使用 glibc 的 Ubuntu 上运行的 Go 可执行文件
  • 结构体到磁盘的高效 Go 序列化

    我的任务是将 C 代码替换为 Go 而且我对 Go API 还很陌生 我正在使用 gob 将数百个键 值条目编码到磁盘页面 但 gob 编码有太多不需要的膨胀 package main import bytes encoding gob f
  • self.__dict__.update(**kwargs) 的风格是好是坏?

    在 Python 中 假设我有一些类 Circle 它继承自 Shape Shape 需要 x 和 y 坐标 此外 Circle 需要半径 我希望能够通过执行类似的操作来初始化 Circle c Circle x 1 y 5 r 3 Cir
  • 共享 GOPATH 的良好做法是什么?

    我刚刚开始学习 Go 并阅读现有代码以了解 其他人是如何做的 在这样做时 go 工作空间 的使用 特别是当它与项目的依赖项相关时 似乎无处不在 在处理各种 Go 项目时 使用单个或多个 Go 工作区 即 GOPATH 的定义 的常见最佳实践

随机推荐

  • 使用 Windows 批处理文件从 txt 文件中仅读取 x 行

    如何从 a txt 文件中只读取 X 行 该文件包含目录的所有名称 我只想读取 x 行 X 可以是 1 到 99 之间的数字 您需要根据需要修改此设置 但下面的脚本将循环遍历文件 directories txt 并回显该行的内容 直到达到中
  • Java 中什么会引发 IOException?

    java io IOException似乎是最常见的异常类型 巧合的是 它似乎也是最模糊的 我不断看到throws IOException每当使用套接字 文件等进行编写时 我实际上从未被触发过 所以我想知道应该触发异常的是什么 该文档对于解
  • 不同实体值具有相同同义词的对话流歧义

    我在使用对话流 api ai 开发代理时遇到问题 我使用了很多彼此不同的实体值 然而 某些实体值有类似的同义词 但代理仅返回一个值 我怎样才能获得所有可能的匹配或提出问题来解决歧义 例如我有一个意图 告诉我 ABC 特快列车的位置 if m
  • Java Spring + Jersey 子资源:在运行时注入构造函数参数

    我定义了以下方法 返回一个表示子资源定位器 泽西岛 的 bean Path slug public PageResource page PathParam slug String siteSlug throws AppException s
  • 如何禁止用户在 Groovy 脚本中做坏事?

    我计划将 Groovy 脚本引擎集成到我的游戏中 这样它将为游戏提供良好的可修改性 但是如何防止玩家编写邪恶的脚本 例如删除 C 驱动器上的所有文件 Groovy 包括类似库java io File默认情况下 因此一旦他们决定编写此类脚本
  • Swift - 如何检测方向变化

    我想将两个图像添加到单个图像视图 即横向一个图像和纵向另一个图像 但我不知道如何使用快速语言检测方向变化 我尝试过这个答案 但它只需要一张图片 override func viewWillTransitionToSize size CGSi
  • 如何在 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