In Go, mit einem panic()
können Sie defer
und recover()
zu prevent an app from exiting verwenden und Code weiter ausführen.golang - App von Beenden verhindern
Allerdings versuche ich zu verhindern, dass meine App beendet wird, wenn ich eine dial tcp 192.168.1.1:830: getsockopt: connection refused
bekomme. Die Anwendung Exits mit einem Statuscode von 1. Es ist technisch kein Fehler, daher kann ich den Fehler nicht abfangen. Das externe Paket, das ich verwende, um die TCP-Wählfunktion auszuführen, bewirkt, dass die Anwendung beendet wird, wenn diese Bedingung eintritt. (In diesem Fall liegt das daran, dass der Port blockiert ist.)
Wie kann ich den Exit von einem anderen Paket wiederherstellen und mit meiner Anwendung fortfahren? Nehmen Sie die unten als Beispiel:
func makeRequest(target string) {
// Exits with status code 1, if connection refused
res, err := request.NewSession(target)
}
Ist es in Panik geraten oder beenden? Wenn das andere Paket 'os.Exit' aufruft, können Sie nicht viel tun (außer vielleicht dieses Paket nicht verwenden: /). Welches Paket verursacht das Problem? – yazgazan
Wenn ein Bibliothekspaket "os.Exit" aufruft, * verwende dieses Paket nicht *. Das ist unentschuldbar schlecht für ein Bibliothekspaket. – Adrian
Es ist definitiv ein Ausgang und keine Panik, ich bekomme 'Exit Status 1' in stdout. Das Paket ist "https: // github.com/Juniper/go-netconf", aber es verwendet 'golang.org/x/crypto/ssh', um die Anrufe zu tätigen. – Devin