永不评估消息时应使用哪种渠道类型?

时间:2019-02-02 11:41:07

标签: go

使用以下select语句,我要确保某些无阻塞功能只能一一执行:

select {
case <-available:
default:
    fmt.Println("busy")
    return
}
go func() {
    defer func() { available <- true }()
    doSomethingOneByOne()
}()

当前,我使用bool作为频道类型,并且按预期工作。

我不喜欢使用bool表示值是truefalse很重要。但实际上在这种情况下并不重要。我认为这会使理解代码更加困难,因为它具有误导性。

当值无关紧要时,是否使用哪种类型的约定?

1 个答案:

答案 0 :(得分:11)

chan struct{}是一个有效的选择-struct{}是有效的类型,但是此类型的值contains no data and has zero size和所有struct{}的值是无法区分的,因此使其成为{ {3}}。要构造类型struct{}的值以在通道上发送,可以使用文字struct{}{}