struct的传递场景
参考解析
题目来源:映客
答案1:
- struct的特点
- 用来自定义复杂数据结构
- struct里面可以包含多个字段(属性)
- struct类型可以定义方法,注意和函数的区分
- struct类型是值类型
- struct类型可以嵌套
- GO语言没有class类型,只有struct类型
- 特殊之处
- 结构体是用户单独定义的类型,不能和其他类型进行强制转换
- golang中的struct没有构造函数,一般可以使用工厂模式来解决这个问题
- 我们可以为struct中的每个字段,写上一个tag。这个tag可以通过反射的机制获取到,最常用的场景就是json序列化和反序列化。
- 结构体中字段可以没有名字,即匿名字段
- 使用场景
空结构体在各类系统中频繁出现的原因之一,就是需要一个占位符。而恰恰好,Go 空结构体的宽度是特殊的。
- 实现方法接收者。
- 实现集合类型。
Go 语言的标准库中并没有提供集合(Set)的相关实现,因此一般在代码中我们图方便,会直接用 map 来替代。但有个问题,就是集合类型的使用,只需要用到 key(键),不需要 value(值)。
空结构体作为占位符,不会额外增加不必要的内存开销,很方便的就是解决了。
- 实现空通道。
常常会遇到通知型 channel,其不需要发送任何数据,只是用于协调 Goroutine 的运行,用于流转各类状态或是控制并发情况
由于该 channel 使用的是空结构体,因此也不会带来额外的内存开销