英文:
golang - prevent app from Exiting
问题
在Go语言中,使用panic()
可以通过defer
和recover()
来防止应用程序退出并继续执行代码。
然而,我正在尝试在出现dial tcp 192.168.1.1:830: getsockopt: connection refused
错误时防止我的应用程序退出。该应用程序会以状态码1退出。从技术上讲,这不是一个错误,所以我无法捕捉到这个错误。我正在使用的外部包在发生这种情况时导致应用程序退出(在这种情况下,是因为端口被阻止)。
那么,我该如何从另一个包中恢复退出并继续我的应用程序呢?以下面的代码为例:
func makeRequest(target string) {
// 如果连接被拒绝,以状态码1退出
res, err := request.NewSession(target)
}
英文:
In Go, with a panic()
you can use defer
and recover()
to prevent an app from exiting and continue executing code.
However, I'm trying to prevent my app from exiting when getting a dial tcp 192.168.1.1:830: getsockopt: connection refused
. The application Exits with a status code of 1. It's technically not an error so I can't catch the error. The external package I'm using to make the tcp dial causes the app to Exit when this condition occurs. (In this case, it's because the port is blocked.)
So how can I recover the Exit from another package and continue on with my application? Take the below as an example:
func makeRequest(target string) {
// Exits with status code 1, if connection refused
res, err := request.NewSession(target)
}
答案1
得分: 1
很遗憾,你无法从调用os.Exit()中恢复。文档中指出,它会立即退出,甚至不会调用延迟执行的函数。我建议如果一个包中包含退出操作,最好不要使用它,因为这是一个相当糟糕的设计。
英文:
Unfortunately no, you can't recover from a call to os.Exit(). The documentation says that it exits immediately, and not even differed functions are called. I recommend to not use a package if it has an exit in it, as that is a pretty bad design.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论