空struct问题

func main() {
a := struct{}{}
b := struct{}{}
println(&a, &b, &a == &b)

c := new(struct{})
d := new(struct{})
println(c, d, c == d)

}
执行go run -gcflags="-N -l" main.go,结果如下

0xc00004672e 0xc00004672e false
0xc00004672e 0xc00004672e true

求大佬们解惑

曹大给了完整解答,善用 Google

不太一样哦。我在看了曹大的博客后才有了上面的问题,给出的代码没有栈逃逸

&a == &b 这个是两个地址比较,空结构体地址比较为 false , 这个是go有意为之
c == d 这个是两个指针比较 ,go 指针比较的原则是 : 如果两个指针都指向同一个变量,则此运算符返回true。或如果两个指针都指向不同的变量,则返回false

spec明确写了指向zero-size对象的指针的比较结果不确定。

https://golang.google.cn/ref/spec#Comparison_operators

Pointer values are comparable. Two pointer values are equal if they point to the same variable or    
if both have value nil. Pointers to distinct zero-size variables may or may not be equal.