業務背景
之前在寫很多if else時,對於不符合的分支條件總是習慣提前返回,減少對後面分支的心智負擔,
最近在寫1個go專案時,對於比較少使用go,在for select結構裡遇到錯誤返回,導致直接返回了,後續tick就無效了
程式碼抽離簡化如下
func Consumer() {
tick := time.NewTicker(time.Duration(1000) * time.Millisecond)
defer tick.Stop()
n := 0
for {
select {
case <-tick.C:
msg := fmt.Sprintf("ticked:%s,n=%d", gtime.Now().String(), n)
fmt.Println(msg)
time.Sleep(2 * time.Second)
n++
//這裡模擬出錯,
if n == 3 {
fmt.Println(n)
return
}
//後續處理
//很多程式碼
}
}
fmt.Println("end")
}
func TestConsume(t *testing.T) {
go Consumer()
time.Sleep(20 * time.Second)
}
程式碼執行到return 後,整個就返回了,後續的tick再也不起作用了,導致我的gqueue不能正常消費