使用以下select语句,我要确保某些无阻塞功能只能一一执行:
select {
case <-available:
default:
fmt.Println("busy")
return
}
go func() {
defer func() { available <- true }()
doSomethingOneByOne()
}()
当前,我使用bool
作为频道类型,并且按预期工作。
我不喜欢使用bool
表示值是true
或false
很重要。但实际上在这种情况下并不重要。我认为这会使理解代码更加困难,因为它具有误导性。
当值无关紧要时,是否使用哪种类型的约定?
答案 0 :(得分:11)
chan struct{}
是一个有效的选择-struct{}
是有效的类型,但是此类型的值contains no data and has zero size和所有struct{}
的值是无法区分的,因此使其成为{ {3}}。要构造类型struct{}
的值以在通道上发送,可以使用文字struct{}{}
。