struct{}{} 是 Go 中最小的内存占用值(0字节)
在 Go 语言中,struct{}{} 确实是一个特殊的值,它具有以下特点:
1. 零内存占用
- 它是空结构体 
struct{}的实例,而空结构体不占用任何内存空间(0 字节)。 - 这是因为空结构体没有任何字段需要存储。
 
2. 用途
- 占位符:常用于不需要存储数据,仅需要逻辑存在的场景(如信号、标记)。
 - 实现集合(Set):配合 
map使用,因为只关心键而非值:set := make(map[string]struct{}) set["key"] = struct{}{} // 值部分不占用额外内存 - 通道信号:通过 
chan struct{}发送无数据的信号:done := make(chan struct{}) go func() { // ... 执行任务 ... done <- struct{}{} // 发送完成信号 }() 
3. 唯一性
- 所有 
struct{}{}的地址相同(编译器优化),但通常直接使用值而非指针。 
4. 对比其他“零值”
- 其他类型的零值(如 
int的0)仍会占用对应类型的内存(如int为 8 字节),但struct{}{}真正实现零内存。 
示例代码
package main
import (
	"fmt"
	"unsafe"
)
func main() {
	empty := struct{}{}
	fmt.Println("Size of empty struct:", unsafe.Sizeof(empty)) // 输出 0
	// 作为 map 的值
	set := make(map[string]struct{})
	set["a"] = struct{}{}
	fmt.Println("Set contains 'a':", _, ok := set["a"]) // true
	// 通道信号
	ch := make(chan struct{})
	go func() {
		ch <- struct{}{}
	}()
	<-ch
	fmt.Println("Signal received")
}
总结
struct{}{} 是 Go 中一种高效的设计模式,适用于需要零内存开销的场景,尤其在集合和信号传递中非常有用。
    Do not communicate by sharing memory; instead, share memory by communicating.

                
            
        
浙公网安备 33010602011771号