Go空结构体struct {}

简介: struct {}介绍、使用场景、和struct {}{}比较

介绍

struct是Go中的关键字,用于定义结构类型。


struct {}是一个无元素的结构体类型(空结构体),通常在没有信息存储时使用。优点是大小为0,不需要内存来存储struct {}类型的值。

func main() {

var s struct{}

fmt.Println(unsafe.Sizeof(s))

}

输出结果:

0


struct {} {}是一个复合字面量,它构造了一个struct {}类型的值,该值也是空。

func main() {

   fmt.Println(unsafe.Sizeof(struct{}{}))

}

输出结果:

0

应用场景

实现方法接收者

在业务场景下,我们需要将方法组合起来,代表其是一个 ”分组“ 的,便于后续拓展和维护。

type T struct{}

func (s *T) Call() {

fmt.Println("call")

}

func main() {

var s T

s.Call()

}

实现集合set

Go 语言标准库没有提供 Set 的实现,通常使用 map 来代替。

type Set map[string]struct{}

func (s Set) Has(key string) bool {

   _, ok := s[key]

   return ok

}

func (s Set) Add(key string) {

   s[key] = struct{}{}

}

func (s Set) Delete(key string) {

   delete(s, key)

}

func main() {

   s := make(Set)

   s.Add("Tom")

   s.Add("Sam")

   fmt.Println(s.Has("Tom"))

   fmt.Println(s.Has("Jack"))

}

不发送数据的信道(channel)

基于channels发送消息有两个重要方面:发了消息、发了什么消息。一个强调了通讯的发生,一个强调了通讯的内容。当我们更希望强调通讯发生的时刻时,我们将它称为消息事件。有些消息事件并不携带额外的信息,它仅仅是用作两个goroutine之间的同步,这时候我们可以用struct{}空结构体作为channels元素的类型。用来通知子协程(goroutine)执行任务,或只用来控制协程并发度。

yaolong
+关注
目录
打赏
0
0
0
0
0
分享
相关文章
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
|
3月前
|
go语言中结构体(Struct)
go语言中结构体(Struct)
128 71
Go nil 空结构体 空接口有什么区别?
本文介绍了Go语言中的`nil`、空结构体和空接口的区别。`nil`是预定义的零值变量,适用于指针、管道等类型;空结构体大小为0,多个空结构体实例指向同一地址;空接口由`_type`和`data`字段组成,仅当两者均为`nil`时,空接口才为`nil`。
Go nil 空结构体 空接口有什么区别?
|
4月前
|
探索 Go 语言中的内存对齐:为什么结构体大小会有所不同?
在 Go 语言中,内存对齐是优化内存访问速度的重要概念。通过调整数据在内存中的位置,编译器确保不同类型的数据能够高效访问。本文通过示例代码展示了两个结构体 `A` 和 `B`,尽管字段相同但排列不同,导致内存占用分别为 40 字节和 48 字节。通过分析内存布局,解释了内存对齐的原因,并提供了优化结构体字段顺序的方法,以减少内存填充,提高性能。
56 3
|
6月前
|
Go
Go to Learn Go之结构体
Go to Learn Go之结构体
52 5
Go语言结构体和元组全面解析
Go语言结构体和元组全面解析
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
Go实现json字符串与各类struct相互转换
文章通过Go语言示例代码详细演示了如何实现JSON字符串与各类struct之间的相互转换,包括结构体对象生成JSON字符串和JSON字符串映射到struct对象的过程。
62 0
Go从入门到放弃之结构体(面向对象)
Go从入门到放弃之结构体(面向对象)

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等