为什么要创建一个具有空结构的类型?
type FrontierSigner struct{}
它有什么用?
最佳答案
空结构 struct{}
在 Go 中以特殊方式实现。
它是 Go 中最小的构建 block 。它的大小实际上是 0 字节。
如果它的大小为零。你可以创建一个包含 1000 个空结构的 slice ,这个 slice 会非常小。因为真正的 Go 在 slice 中只存储了它们中的一部分,而不是它们本身。 channel 也是如此。
所有指向它的指针总是指向内存中相同的特殊位置。
当您通知某个事件但不需要传递有关它的任何信息时,它在 channel 中非常有用,只需传递一个事实。最好的解决方案是传递一个空结构,因为它只会增加 channel 中的计数器,而不会分配内存、复制元素等。 有时人们为此目的使用 bool 值,但情况更糟。
方法的零大小容器。您可能想要一个用于测试接口(interface)的模拟。通常您不需要上面的数据,只需要具有预定义输入和输出的方法。
Go 没有
Set
对象。 Bit 可以很容易地实现为map[keyType]struct{}
。这样 map 只保留键而不保留值。
关于go - 在 Go 中使用空结构的类型有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47544156/