在
go中空结构体有很多妙用,它是zero-size的。比如channel发空结构体当信号,map存空结构体当Set使用等等。不过他的指针就很神奇了,薛定谔的相等,还带来了观察者效应。
观察之前
观察之后
观察单个
我没看懂
在我们打印两个空结构体指针地址之前
&a和&b是不相等的,单独打印某一个也不相等,当我们两个都打印之后神奇的一幕发生了&a和&b相等了。关于这种情况在 go 编程规范 上搜
zero-size能找到这么一句话。Pointer types 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.
指针类型是可比较的。如果两个指针值指向同一个变量或者两者的值为 nil,则它们相等。指向不同零大小变量的指针可能相等也可能不相等。
小结
- 空结构体指针比较诡异一般不建议使用。
- 空结构体本身是
zero-size的,而空结构体指针是 8 字节,用指针意义也不大。