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)执行任务,或只用来控制协程并发度。

目录
相关文章
|
23天前
|
Go 开发者
掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)
掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)
|
3月前
|
关系型数据库 MySQL Go
工厂模式+自动注册管理Go多包结构体
工厂模式+自动注册管理Go多包结构体
45 1
|
3月前
|
编译器 Go
go语言第六章(结构体与方法)
go语言第六章(结构体与方法)
22 0
|
4月前
|
存储 JSON Go
妙啊,空结构体还能这么用?Go语言的结构体看这篇就够了
妙啊,空结构体还能这么用?Go语言的结构体看这篇就够了
|
4月前
|
存储 程序员 编译器
go语言中的结构体(二)
go语言中的结构体
37 0
|
4月前
|
Go
go语言中的结构体(一)
go语言中的结构体
32 0
|
4月前
|
存储 Go
Go 语言中结构体的使用和示例
结构体(简称struct)用于创建不同数据类型的成员集合,放入一个单一的变量中。虽然数组用于将相同数据类型的多个值存储在单一变量中,但结构体用于将不同数据类型的多个值存储在单一变量中。结构体对于将数据组合在一起以创建记录非常有用。
38 0
|
4月前
|
编译器 Go 调度
Go结构体&接口&反射(下)
Go结构体&接口&反射(下)
|
4月前
|
JSON Java Go
Go结构体&接口&反射(上)
Go结构体&接口&反射(上)
|
4月前
|
编译器 Go
go struct 使用
go struct 使用
25 0