为了账号安全,请及时绑定邮箱和手机立即绑定

为什么只使用新函数来创建相同结构的两个指针在 go 中相等

为什么只使用新函数来创建相同结构的两个指针在 go 中相等

Go
慕桂英4014372 2021-08-23 16:27:48
我想比较同一结构的 2 个实例,以确定它是否相等,并得到两个不同的结果。注释代码 // fmt.Println("%#v\n", a),程序输出为“Equal”使用 fmt 打印变量“a”,然后我得到输出“Not Equal”请帮我找出原因???我使用 golang 1.2.1package mainimport (    "fmt")type example struct {}func init() {   _ = fmt.Printf}func main() {    a := new(example)    b := new(example)    // fmt.Println("%#v\n", a)    if a == b {         println("Equals")    } else {        println("Not Equals")    }   }
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

这里涉及到几个方面:

  1. 您通常无法通过比较指针来比较结构的值:a并且b是指向examplenot 实例的指针。a==b比较指针(即内存地址)而不是值。

  2. 不幸的example是,您是空结构体struct{},对于一个且唯一的空结构体而言,一切都不同,因为它并不真正存在,因为它不占用空间,因此所有不同的结构struct {}可能(也可能不)具有相同的地址。

所有这些都与调用 fmt.Println 无关。空结构体的特殊行为只是通过 fmt.Println 完成的反射表现出来。

只是不要struct {}用于测试任何真实结构的行为方式。


查看完整回答
反对 回复 2021-08-23
  • 1 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信