我想比较同一结构的 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个赞
这里涉及到几个方面:
您通常无法通过比较指针来比较结构的值:
a
并且b
是指向example
not 实例的指针。a==b
比较指针(即内存地址)而不是值。不幸的
example
是,您是空结构体struct{}
,对于一个且唯一的空结构体而言,一切都不同,因为它并不真正存在,因为它不占用空间,因此所有不同的结构struct {}
可能(也可能不)具有相同的地址。
所有这些都与调用 fmt.Println 无关。空结构体的特殊行为只是通过 fmt.Println 完成的反射表现出来。
只是不要struct {}
用于测试任何真实结构的行为方式。
- 1 回答
- 0 关注
- 202 浏览
添加回答
举报
0/150
提交
取消