2017-07-20 70 views
0

在Go中,使用panic(),您可以使用deferrecover()prevent an app from exiting並繼續執行代碼。golang - 阻止應用退出

但是,我試圖阻止我的應用程序退出時獲得dial tcp 192.168.1.1:830: getsockopt: connection refused。應用程序退出,狀態碼爲1.它在技術上不是錯誤,所以我無法捕捉到錯誤。發生此情況時,我用來製作tcp撥號的外部程序包會導致應用程序退出。 (在這種情況下,這是因爲端口被阻止。)

那麼,如何恢復從另一個包中退出並繼續使用我的應用程序?以下面爲例:

func makeRequest(target string) { 
    // Exits with status code 1, if connection refused 
    res, err := request.NewSession(target) 
} 
+2

它是恐慌還是退出?如果其他軟件包調用'os.Exit',那麼你可以做的事情就不多了(除非使用這個軟件包:/)。什麼包導致了這個問題? – yazgazan

+1

如果庫包調用'os.Exit',*不要使用該包*。對於一個圖書館軟件包來說,這是不可思議的不好的做法 – Adrian

+1

這絕對是一個退出,而不是恐慌,我在標準輸出中獲得'退出狀態1'。該軟件包是「https:// github.com/Juniper/go-netconf」,但它使用golang.org/x/crypto/ssh來撥打電話。 – Devin

回答

1

不幸的是,您不能從調用os.Exit()中恢復。該文件說,它立即退出,甚至沒有不同的功能被稱爲。我建議不要使用一個包,如果它有一個退出,因爲這是一個非常糟糕的設計。