初级会员
  • 第 41106 位会员
  • 939496716
  • 2019-07-31 20:59:34
  • Offline
  • 37 15

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 可以用runtime.Goexit()停止当前Go协程 ``` package main import ( "log" "runtime" "time" ) func main() { cb := make(chan bool, 1) go func() { timer2 := time.NewTimer(time.Second * 3) tick := time.Tick(time.Second * 5) select { case <-timer2.C: runtime.Goexit() //超时后退出该Go协程 case <-tick: //模拟超时任务 log.Println(222) //处理业务代码 cb <- true return } }() log.Println() timer := time.NewTimer(time.Second * 2) select { case <-timer.C: log.Println("time out") cb <- false case tmp := <-cb: log.Println(tmp) } time.Sleep(time.Second * 10) log.Println(123) } ```
  • ``` func ProcessChannelMessages(ctx context.Context, in <-chan string, idleCounter prometheus.Counter) { idleDuration := 5 * time.Minute tick:= time.Tick(idleDuration) for { select { case s, ok := <-in: if !ok { return } // handle `s` case <-tick: idleCounter.Inc() case <-ctx.Done(): return } } } ``` 用这种周期性运行的方法,同样实现上面的功能,这个应该不会有内存泄露吧