生产消息模型的优雅停止
package main import ( "fmt" "os" "os/signal" "syscall" "time" ) func main() { readCh := make(chan int, 100) //生产者写数据 go func() { for i := 0; i <= 10; i++ { readCh <- i } }() //监听进程退出信号 go func() { signalCh := make(chan os.Signal, 1) signal.Notify(signalCh, syscall.SIGINT, syscall.SIGTERM) // 等待接收终止信号 <-signalCh close(readCh) fmt.Println("stop begin,time: ", time.Now()) }() //消费者遍历chan处理数据 flag := true for flag { func() { select { case val, run := <-readCh: //readCh只有有数据,run就会为true if !run { flag = false return } time.Sleep(time.Second) fmt.Println("step2 val: ", val, "run: ", run) } }() } fmt.Println("stop end,time: ", time.Now()) }
等风起的那一天,我已准备好一切
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2022-06-28 求二叉搜索树的下一个节点(中序遍历的下一个节点)
2022-06-28 放苹果
2022-06-28 灯泡开关
2022-06-28 树的子结构(判断B是否为A的子树)