2017-07-20 16 views
0

panic()deferrecover()prevent an app from exitingを使用してコードを実行し続けることができます。golang - 終了からアプリケーションを防ぐ

しかし、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) 
} 
+2

パニックになるか、終了しますか?他のパッケージが 'os.Exit'を呼び出した場合は、あまり多くのことができません(/このパッケージを使用しないでください)。問題を引き起こしているのはどのパッケージですか? – yazgazan

+1

ライブラリパッケージが 'os.Exit'を呼び出した場合、*はそのパッケージを使用しません。それはライブラリパッケージのためには許されない悪い習慣です。 – Adrian

+1

これは間違いなくパニックではなく出口ですが、私はstdoutで 'exit status 1 'を得ます。パッケージは 'https:// github.com/Juniper/go-netconf'ですが、' golang.org/x/crypto/ssh'を使って呼び出します。 – Devin

答えて

1

残念ながら、os.Exit()の呼び出しから回復することはできません。ドキュメントには、すぐに終了し、異なる機能が呼び出されることさえありません。私はそれがかなり悪い設計であるので、それに出口があるパッケージを使用しないことをお勧めします。

関連する問題