2 回答
TA贡献1725条经验 获得超7个赞
您不能禁用default子句,但可以case通过分配nil给 chan 来禁用子句。也许像下面的代码一样创建一个非常快速的代码。下面的代码将 chanC从股票代码分配给defaultCh然后通过分配禁用它nil。
ticker := time.NewTicker(time.Microsecond)
defaultCh := ticker.C
for {
select {
case p := <-subscriber.Next:
...
case err := <subscriber.OnError:
...
case <-defaultCh:
subscriber.Subscribe(name, params)
...
if finished {
defaultCh = nil
ticker.Stop()
}
}
}
}
TA贡献1869条经验 获得超4个赞
我不知道有任何内置功能可以执行此操作,但您可以根据您的状态输入两个不同的选择语句。
for {
// Without default case, wait only for cases
if finished {
select {
case p := <-subscriber.Next:
//...
case err := <-subsriber.OnError:
//...
}
} else {
// Allow default case
select {
case p := <-subscriber.Next:
//...
case err := <-subsriber.OnError:
//...
default:
subscriber.Subscribe(name, params)
}
}
}
这当然会导致代码重复,但至少它不会进入循环只是发现什么都不需要做。
- 2 回答
- 0 关注
- 109 浏览
添加回答
举报