为什么要创建一个空结构的类型?
type FrontierSigner struct{}
Run Code Online (Sandbox Code Playgroud)
到底有什么好处呢?
Eug*_*sky 20
struct{}在Go中以特殊方式实现空结构.
它是Go中最小的构建块.它的大小字面上是0字节.
如果是零大小.你可以创建一个1000个空结构的切片,这个切片将非常小.因为真正的Go只在切片中存储了一些但不是它们本身.与渠道相同的故事.
所有指向它的指针总是指向内存中的同一个特殊位置.
非常有用在通道中,当您通知某些事件但不需要传递任何有关它的信息时,只有一个事实.最好的解决方案是传递一个空结构,因为它只会增加通道中的计数器,但不会分配内存,复制元素等等.有时人们会为此目的使用布尔值,但情况要糟糕得多.
用于方法的零尺寸容器.你可能想要一个模拟测试接口.通常你不需要数据,只需要预定义输入和输出的方法.
Go没有任何Set对象.位可以很容易地实现为map[keyType]struct{}.这种方式映射只保留键和没有值.
我通常在我会使用布尔值通道的地方使用它。即,而不是;
func main() {
done := make(chan bool, 1)
go func() {
// simulate long running task
time.Sleep(4 * time.Second)
done <- true
fmt.Println("long running task is done")
}()
<-done
close(done)
fmt.Printf("whole program is done.")
}
Run Code Online (Sandbox Code Playgroud)
我用;
package main
import (
"fmt"
"time"
)
func main() {
done := make(chan struct{}, 1)
go func() {
// simulate long running task
time.Sleep(4 * time.Second)
done <- struct{}{}
fmt.Println("long running task is done")
}()
<-done
close(done)
fmt.Printf("whole program is done.")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2189 次 |
| 最近记录: |