空 struct{} 占多少空间?有什么用途?
答:0 , 用于占位符
例如:
- map[string]struct{},只关注key是否存在的话可以使用节省内存空间
- ch := make(chan struct{}, 1),使用信道(channel)控制并发时,我们只是需要一个信号,但并不需要传递值,这个时候,也可以使用 struct{} 代替。
- type Lamp struct{} ,声明只包含方法的结构体。
type Lamp struct{}
func (l Lamp) On() {
println("On")
}
func (l Lamp) Off() {
println("Off")
}
解析:
Go为每一种类型都有全局唯一的类型元数据,元数据记录了该类型大小。因为空结构体内没有任何的类型因此空类型的大小为0。但是因为有创建类型元数据因此可以想正常的类型一样用于占位
这里建议看一下参考资料【幼麟实验室】- Go类型系统讲解
参考资料: