在 Go 中,通过panic()
,您可以使用defer
和recover()
来防止应用程序退出并继续执行代码。
但是,我正在尝试阻止我的应用程序在获得dial tcp 192.168.1.1:830: getsockopt: connection refused
时退出。应用程序以状态代码 1 退出。从技术上讲,这不是错误,所以我无法捕获错误。我用于制作 tcp 拨号的外部包会导致应用程序在发生这种情况时退出。(在这种情况下,这是因为端口被阻止。
那么,如何从另一个包中恢复 Exit 并继续我的应用程序呢?下面以下列情况为例:
func makeRequest(target string) {
// Exits with status code 1, if connection refused
res, err := request.NewSession(target)
}
不幸的是,不,您无法从对操作系统的调用中恢复。退出((。文档说它会立即退出,甚至没有调用不同的函数。如果包有出口,我建议不要使用它,因为这是一个非常糟糕的设计。