2 回答

TA貢獻1725條經驗 獲得超8個贊
您不能禁用default子句,但可以case通過分配nil給 chan 來禁用子句。也許像下面的代碼一樣創建一個非??焖俚拇a。下面的代碼將 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 關注
- 125 瀏覽
添加回答
舉報