Go学习--谈谈空结构体strcut{}{}

Go学习–谈谈空结构体strcut{}{}

1、特性

  • 空结构体是一种特殊的结构体,不包含任何元素。
type empty struct{} 
  • 占用内存为0,节省内存。

  • 所有空结构体的指针相同。

    源码中可以看出,创建新的对象时,需要调用 malloc.newobject() 进行内存分配,进一步调用 mallocgc 方法,在该方法中,如果判断类型的size==0 ,固定返回zerobase的地址。zerobase是一个uintptr 全局变量,占用 8 个字节。

    因此我们可以确定的是,在Go语言中,所有针对 size==0 的内存分配,用的都是同一个地址&zerobase,所以我们在一开始看到的所有空结构体地址都相同。

2、使用场景

(1)Set集合

Set 是保存不重复元素的集合,但是 Go 语言没有提供原生的 Set 类型。但是我们知道 Map 结构存储的是 key-value 类型,key 不允许重复,因此可以利用 Map 来实现 Set,key存储需要的数据,value 给个固定值就可以了。那么 value 给什么值好呢?这时候我们的 空结构体 就可以出场了,不占用空间,还可以完成占位操作,堪称完美。

(2)channel 信号传输

空结构体channel 可谓是一个经典组合,有时候我们只是需要一个信号来控制程序的运行逻辑,并不在意其内容如何。

(3)方法分组

有时为了业务的需要,需要将方法分组,易拓展,省空间,又结构化。

type groupA struct{}

type groupB struct{}

func (a groupA) f1(){

}

func (a groupA) f2(){

}

func (b groupB) f2(){

}

func (b groupB) f2(){

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值