2017-07-20 71 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()中恢复。该文件说,它立即退出,甚至没有不同的功能被称为。我建议不要使用一个包,如果它有一个退出,因为这是一个非常糟糕的设计。