go - 在 Go 中使用空结构的类型有什么用?

标签 go

为什么要创建一个具有空结构的类型?

type FrontierSigner struct{}

它有什么用?

最佳答案

空结构 struct{} 在 Go 中以特殊方式实现。

  1. 它是 Go 中最小的构建 block 。它的大小实际上是 0 字节。

  2. 如果它的大小为零。你可以创建一个包含 1000 个空结构的 slice ,这个 slice 会非常小。因为真正的 Go 在 slice 中只存储了它们中的一部分,而不是它们本身。 channel 也是如此。

  3. 所有指向它的指针总是指向内存中相同的特殊位置。

  4. 当您通知某个事件但不需要传递有关它的任何信息时,它在 channel 中非常有用,只需传递一个事实。最好的解决方案是传递一个空结构,因为它只会增加 channel 中的计数器,而不会分配内存、复制元素等。 有时人们为此目的使用 bool 值,但情况更糟。

  5. 方法的零大小容器。您可能想要一个用于测试接口(interface)的模拟。通常您不需要上面的数据,只需要具有预定义输入和输出的方法。

  6. Go 没有Set 对象。 Bit 可以很容易地实现为 map[keyType]struct{}。这样 map 只保留键而不保留值。

关于go - 在 Go 中使用空结构的类型有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47544156/

相关文章:

google-app-engine - 错误 : (gcloud. preview.app)无效的选择: 'run'

go - 执行命令中断

go - 在 Go 中创建具有约束的自定义类型

time - 如何解析 Go 中的非标准日期/时间?中欧夏令时

go - 使用类型定义

amazon-s3 - 在 S3 上部署 Go 二进制文件

mysql - golang gorm 访问底层mysql查询

go - 我可以在使用预停止 Hook 进行硬驱逐之前优雅地终止进程吗?

go - 为sns传输添加服务名称

mysql - 如何处理 sql.ErrTxDone