首頁 >後端開發 >Golang >golang如何退出進程?

golang如何退出進程?

coldplay.xixi
coldplay.xixi原創
2020-07-18 15:10:107088瀏覽

golang退出程序的方法:先定義一個【chan struct{}】;然後呼叫【close()】函數關閉channel,將退出訊號傳遞給每一個goroutine;最後取到【<-chan 】的時候,退出break循環即可。

golang如何退出進程?

golang退出程序的方法:

以下對讓主函數總到exit func的方案,生產環境裡,exit func可能會做很多的關閉操作,而關閉的物件很可能是很多內嵌無限循環的goroutine,如何把退出訊號傳遞給每一個goroutine呢?

我通常的做法是定義一個chan struct{}  ,當呼叫close()函數關閉channel時,所有的<-chan操作會同時進行,這樣就實現了將退出訊號傳遞給每一個goroutine,而各個goroutine都可以透過select(預設linux下select調用的是epoll進行輪詢)進行輪詢,當取得到 <-chan的時候,break循環

package main
import(
        "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語言教學

以上是golang如何退出進程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn