文章预览
在 Go 语言中,空结构体 struct{} 是一个非常特殊的类型,它 不包含任何字段 并且 不占用任何内存空间 。虽然听起来似乎没什么用,但空结构体在 Go 编程中实际上有着广泛的应用。本文将详细探讨空结构体的几种典型用法,并解释为何它们在特定场景下非常有用。 空结构体不占用内存空间 首先我们来验证下空结构体是否占用内存空间: type Empty struct {} var s1 struct {} s2 := Empty{} s3 := struct {}{} fmt.Printf( "s1 addr: %p, size: %d\n" , , unsafe.Sizeof(s1)) fmt.Printf( "s2 addr: %p, size: %d\n" , , unsafe.Sizeof(s2)) fmt.Printf( "s3 addr: %p, size: %d\n" , , unsafe.Sizeof(s3)) fmt.Printf( "s1 == s2 == s3: %t\n" , s1 == s2 & & s2 == s3) NOTE: 为了保持代码逻辑清晰,这里只展示了代码主逻辑。后文中所有示例代码都会如此,完整代码可以在文末给出的示例代码 GitHub 链接中获取
………………………………