前言

Gostruct{}Go

什么是空结构体

不包含任何字段的结构体,就是空结构体。它有以下两种定义方式:

匿名空结构体

命名空结构体

空结构体的特点

空结构体主要有以下几个特点:

  • 零内存占用
  • 地址相同
  • 无状态

零内存占用

空结构体不占用任何内存空间,这使得空结构体在内存优化方面非常有用,我们来通过例子看看是否真的是零内存占用:

0

地址相同

无论创建多少个空结构体,它们所指向的地址都相同的。

无状态

由于空结构体不包含任何字段,因此它不能有状态。这使得空结构体在表示无状态的对象或情况时非常有用。

为什么是零内存和地址相同

Go

/go/src/runtime/malloc.go

malloc.gosizezerobasezerobase

空结构体的使用场景

空结构体主要有以下三种使用场景:

Set

实现 Set 集合类型

GoSetmapSetmapkeykeyvaluevalue

用于通道信号

GoroutineGoroutine
quitGoroutinequit<-quit

由于通道使用的类型是空结构体,因此不会带来额外的内存开销。

GocontextContextDone()

作为方法接收器

有时候我们需要创建一组方法集的实现(一般来说是实现一个接口),但并不需要在这个实现中存储任何数据,这种情况下,我们可以使用空结构体来实现:

PersonCMYCMYPersonSayHelloSleep
CMY

小结

Go

随后对 空结构体 的特点进行介绍,包括其零内存和多个变量地址相同的特性;

sizezerobase

最后列举了空结构体的三个使用场景,通过这些代码示例,展示了空结构体在实际应用中的一些常见用途。