新聞中心
創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
今天就跟大家聊聊有關(guān)如何在golang中退出進程,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
golang退出進程的方法:首先定義一個【chan struct{}】;然后調(diào)用【close()】函數(shù)關(guān)閉channel,將退出信號傳遞給每一個goroutine;最后取到【<-chan】的時候,退出break循環(huán)即可。
golang退出進程的方法:
以下對讓主函數(shù)總到exit func的方案,生產(chǎn)環(huán)境里,exit func可能會做很多的關(guān)閉操作,而關(guān)閉的對象很可能是很多內(nèi)嵌無限循環(huán)的goroutine,如何把退出信號傳遞給每一個goroutine呢?
我通常的做法是定義一個chan struct{}
,當調(diào)用close()
函數(shù)關(guān)閉channel時,所有的<-chan
操作會同時進行,這樣就實現(xiàn)了將退出信號傳遞給每一個goroutine,而各個goroutine都可以通過select(默認linux下select調(diào)用的是epoll進行輪詢)進行輪詢,當獲取到<-chan
的時候,break循環(huán)
package main import( "fmt" "os" "os/signal" "syscall" ) func main(){ signalChan := make(chan os.Signal,1) //創(chuàng)建一個信號量的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!") }
看完上述內(nèi)容,你們對如何在golang中退出進程有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝大家的支持。
網(wǎng)頁題目:如何在golang中退出進程-創(chuàng)新互聯(lián)
鏈接地址:http://fisionsoft.com.cn/article/dhgcgi.html