golang退出进程的方法:首先定义一个【chan struct{}】;然后调用【close()】函数关闭channel,将退出信号传递给每一个goroutine;最后取到【<-chan】的时候,退出break循环即可。

golang退出进程的方法:

以下对让主函数总到exit func的方案,生产环境里,exit func可能会做很多的关闭操作,而关闭的对象很可能是很多内嵌无限循环的goroutine,如何把退出信号传递给每一个goroutine呢?

我通常的做法是定义一个chan struct{} ,当调用close()函数关闭channel时,所有的<-chan操作会同时进行,这样就实现了将退出信号传递给每一个goroutine,而各个goroutine都可以通过select(默认linux下select调用的是epoll进行轮询)进行轮询,当获取到<-chan的时候,break循环

package mainimport(        "fmt"        "os"        "os/signal"        "syscall")func main(){        signalChan := make(chan os.Signal,1) //创建一个信号量的chan,缓存为1,(0,1)意义不大        signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)//让进城收集信号量。        fmt.Println("i am workding!")        <-signalChan                 ExitFunc()}func ExitFunc(){        fmt.Println("i am exiting!")}

相关学习推荐:Go语言教程

更多相关文章

  1. golang如何调用函数?
  2. 详解Golang中函数作为值与类型
  3. go语言中普通函数与方法的区别是什么?
  4. 详解Go 中方法与函数的区别
  5. 关于golang封装一个bash函数,用于执行bash命令
  6. 总结Golang实现PHP常用函数
  7. PHP扩展之XML操作(三)——XML解析器使用及相关函数
  8. 实例简析XPath串函数和XSLT
  9. XmlTextWriter函数定义与用法汇总

随机推荐

  1. Android webkit image的加载过程解析(二)
  2. Android官方技术文档翻译——Gradle 插件
  3. 获取Android的Java源代码并在Eclipse中关
  4. 当Google忙着忽悠Android的时候,各位别忘
  5. Android 中文API合集 chm版,电子书籍下载
  6. Android 中文 API――android.widget合集
  7. android 自定义组件 :对VelocityTracker的
  8. Android(安卓)SQLite使用详解和多线程并
  9. android基础入门(二)――创建android工程
  10. 2010-11-4