我想比较同一结构的2个实例,看它是否相等,并得到两个不同的结果。
请帮我找出为什么???
我使用golang 1.2.1
package main
import (
"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")
}
}
答案 0 :(得分:6)
这里涉及以下几个方面:
您通常无法通过比较指针来比较结构的值:a
和b
是指向example
的指针而不是示例的实例。 a==b
比较指针(即内存地址)而不是值。
不幸的是,你的example
是空结构struct{}
,并且对于唯一的空结构而言,它实际上并不存在,因为它不占用任何空间,因此不同的struct {}
可能(或可能不)具有相同的地址。
所有这些与调用fmt.Println无关。空结构的特殊行为只是通过fmt.Println完成的反射来表现出来。
只是不要使用struct {}
来测试任何真实结构的行为方式。