Dans Go, avec panic()
, vous pouvez utiliser defer
et recover()
à prevent an app from exiting et continuer à exécuter le code.golang - empêcher l'application de quitter
Cependant, j'essaie d'empêcher mon application de se fermer lorsque j'obtiens un dial tcp 192.168.1.1:830: getsockopt: connection refused
. L'application Quitte avec un code d'état de 1. Techniquement, ce n'est pas une erreur, donc je ne peux pas attraper l'erreur. Le package externe que j'utilise pour créer la commande tcp entraîne la sortie de l'application lorsque cette condition se produit. (Dans ce cas, c'est parce que le port est bloqué.)
Alors, comment puis-je récupérer la sortie d'un autre paquet et continuer avec mon application? Prenez l'exemple ci-dessous:
func makeRequest(target string) {
// Exits with status code 1, if connection refused
res, err := request.NewSession(target)
}
Panique-t-il ou disparaît-il? Si l'autre paquet appelle 'os.Exit', alors vous ne pouvez pas faire grand-chose (sauf peut-être n'utilisez pas ce paquet: /). Quel paquet cause le problème? – yazgazan
Si un paquet de bibliothèque appelle 'os.Exit', * n'utilisez pas ce paquet *. C'est une pratique inexcusablement mauvaise pour un paquet de bibliothèque. – Adrian
C'est définitivement une sortie et pas de panique, j'obtiens 'exit status 1' dans stdout. Le paquet est 'https: // github.com/Juniper/go-netconf' mais il utilise' golang.org/x/crypto/ssh' pour faire les appels. – Devin