struct的传递场景

参考解析

题目来源:映客

答案1:

  1. struct的特点
  • 用来自定义复杂数据结构
  • struct里面可以包含多个字段(属性)
  • struct类型可以定义方法,注意和函数的区分
  • struct类型是值类型
  • struct类型可以嵌套
  • GO语言没有class类型,只有struct类型
  1. 特殊之处
  • 结构体是用户单独定义的类型,不能和其他类型进行强制转换
  • golang中的struct没有构造函数,一般可以使用工厂模式来解决这个问题
  • 我们可以为struct中的每个字段,写上一个tag。这个tag可以通过反射的机制获取到,最常用的场景就是json序列化和反序列化。
  • 结构体中字段可以没有名字,即匿名字段
  1. 使用场景

空结构体在各类系统中频繁出现的原因之一,就是需要一个占位符。而恰恰好,Go 空结构体的宽度是特殊的。

  • 实现方法接收者。
  • 实现集合类型。
    Go 语言的标准库中并没有提供集合(Set)的相关实现,因此一般在代码中我们图方便,会直接用 map 来替代。但有个问题,就是集合类型的使用,只需要用到 key(键),不需要 value(值)。

空结构体作为占位符,不会额外增加不必要的内存开销,很方便的就是解决了。

  • 实现空通道。
    常常会遇到通知型 channel,其不需要发送任何数据,只是用于协调 Goroutine 的运行,用于流转各类状态或是控制并发情况

由于该 channel 使用的是空结构体,因此也不会带来额外的内存开销