空结构体的特点
- 不占用内存;
- 地址不变;
空结构体的作用
- 实现集合(Set)
- 不发送数据的Channel
- 仅包含方法的结构体
- 作为context的key
示例
1、不占用内存,Sizeof结果为0
type LogIdKey struct{}
func TestSizeof(t *testing.T) {
fmt.Println(unsafe.Sizeof(LogIdKey{})) //0
}
2、地址不变,下面例子中a==b,基于此特性可以作为context的key使用
type LogIdKey struct{}
func TestAddress(t *testing.T) {
a := LogIdKey{}
b := LogIdKey{}
fmt.Println(a == b) //true
c := &LogIdKey{}
d := &LogIdKey{}
fmt.Println(c == d) //false
}
3、实现集合(Set)/不发送数据的Channel——这俩主要是基于空结构体不占用内存;