本文摘自php中文网,作者(*-*)浩,侵删。

goroutine和channel是Go语言非常棒的特色,它们提供了一种非常轻便易用的并发能力。但是当您的应用进程中有很多goroutine的时候,如何在主流程中等待所有的goroutine 退出呢?
1 通过Channel传递退出信号 (推荐学习:go)
Go的一大设计哲学就是:通过Channel共享数据,而不是通过共享内存共享数据。主流程可以通过channel向任何goroutine发送停止信号,就像下面这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | func run(done chan int) {
for {
select {
case <-done:
fmt.Println("exiting...")
done <- 1
break
default:
}
time.Sleep(time.Second * 1)
fmt.Println("do something")
}
}
func main() {
c := make(chan int)
go run(c)
fmt.Println("wait")
time.Sleep(time.Second * 5)
c <- 1
<-c
fmt.Println("main exited")
}
|
这种方式可以实现优雅地停止goroutine,但是当goroutine特别多的时候,这种方式不管在代码美观上还是管理上都显得笨拙不堪。
阅读剩余部分
相关阅读 >>
手撸golang 基本数据结构与算法 数组
[go] go语言实战-实现标题闪烁
手撸golang go与微服务 net.rpc之1
golang怎么自定义错误
golang 无向简单图邻接多重表
golang面试题之简单聊聊内存逃逸?
golang判断今天星期几
kubeedge v1.3部署指南
详解golang编译成dll文件
golang和python的区别
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » golang 如何结束一个协程