您好,在Golang中,當程序關(guān)閉時,會觸發(fā)一個名為os.Exit的事件。os.Exit是Go語言標準庫中的一個函數(shù),它可以接受一個整數(shù)參數(shù),用來指定程序的退出狀態(tài)。當程序調(diào)用os.Exit時,它會立即終止程序的執(zhí)行,而不會執(zhí)行defer函數(shù)。os.Exit函數(shù)會觸發(fā)一個特殊的事件,可以讓程序在退出前做一些必要的清理工作,比如關(guān)閉文件句柄,釋放系統(tǒng)資源等。此外,os.Exit函數(shù)還可以用來控制程序的退出狀態(tài),從而可以更好地控制程序的執(zhí)行流程。
創(chuàng)新互聯(lián)公司是專業(yè)的海西網(wǎng)站建設(shè)公司,海西接單;提供成都網(wǎng)站設(shè)計、做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行海西網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
測試動態(tài)庫步驟:
1、test_so.h
2、test_so.c
3、生成so
4、復(fù)制so文件到Go項目目錄
Go項目目錄
1、load_so.h
2、load_so.c
3、test.go
4、Go項目目錄要放在$GOPATH/src/目錄下,這也是正常操作。
test目錄為Go項目,里邊是上述創(chuàng)建的所有源碼文件。
在$GOPATH/src/test/里直接使用gobuild編譯生成test二進制文件,此處需要注意執(zhí)行路徑。
問題
1、/**/注釋的代碼下一行一定是import“C”,中間不能有空行
2、importC必須單獨一行,不能和其它庫一起導(dǎo)入
3、有人編譯的時候會報錯:
這個主要是執(zhí)行目錄問題,一定要在$GOPATH/src/項目/目錄下,用gobuild執(zhí)行,gobuild后邊不要有任何文件名。
或者用gorun.運行,或者goruntest,test是項目名。不能用goruntest.go。
4、還有人報這個錯:test.go文件里的cgoLDFLAGS:-ldl這一行不要刪掉。
設(shè)置可同時執(zhí)行的邏輯Cpu數(shù)量,默認和硬件的線程數(shù)一致而不是核心數(shù),可以通過調(diào)用GOMAXPROCS(-1)來獲取當前邏輯Cpu數(shù)最好在main函數(shù)之前設(shè)置它,GOMAXPROCS同時也是go的環(huán)境變量之一。
return結(jié)束當前函數(shù),并返回指定值;runtime.Goexit結(jié)束當前goroutine,其他的goroutine不受影響,主程序也一樣繼續(xù)運行;os.Exit會結(jié)束當前程序,不管你三七二十一;暫停當前goroutine,使其他goroutine先行運算。只是暫停,不是掛起,當時間片輪轉(zhuǎn)到該協(xié)程時,Gosched()后面的操作將自動恢復(fù)。還沒等到子協(xié)程執(zhí)行,主協(xié)程就已經(jīng)執(zhí)行完退出了,子協(xié)程將不再執(zhí)行,所以打印的全部是主協(xié)程的數(shù)據(jù)。當然,實際上這個執(zhí)行結(jié)果也是不確定的,只是大概率出現(xiàn)以上輸出,因為主協(xié)程和子協(xié)程間并沒有絕對的順序關(guān)系。在打印goroutine1之前,主協(xié)程調(diào)用了runtime.Gosched()方法,暫停了主協(xié)程。子協(xié)程獲得了調(diào)度,從而先行打印了goroutine2。主協(xié)程不是一定要等其他協(xié)程執(zhí)行完才會繼續(xù)執(zhí)行,而是一定時間。如果這個時間內(nèi)其他協(xié)程沒有執(zhí)行完,那么主協(xié)程將繼續(xù)執(zhí)行,立即終止當前協(xié)程,不會影響其它協(xié)程,且終止前會調(diào)用此協(xié)程聲明的defer方法。由于Goexit不是panic,所以recover捕獲的error會為nil。當main方法所在主協(xié)程調(diào)用Goexit時,Goexit不會return,所以主協(xié)程將繼續(xù)等待子協(xié)程執(zhí)行,當所有子協(xié)程執(zhí)行完時,程序報錯deadlock。