エラーコードでプログラムを終了する慣用的な方法は何ですか?
のドキュメントにExit
は、「プログラムはすぐに終了します。遅延関数は実行されません。」と書かれており、log.Fatal
単にExit
. 凶悪なエラーではない場合、遅延関数を実行せずにプログラムを終了するのは極端に思えます。
エラーが発生したことを示す状態を渡してから、Exit(1)
すべての遅延関数が実行された状態で、安全に終了できることがわかっている時点で呼び出す必要がありますか?
エラーコードでプログラムを終了する慣用的な方法は何ですか?
のドキュメントにExit
は、「プログラムはすぐに終了します。遅延関数は実行されません。」と書かれており、log.Fatal
単にExit
. 凶悪なエラーではない場合、遅延関数を実行せずにプログラムを終了するのは極端に思えます。
エラーが発生したことを示す状態を渡してから、Exit(1)
すべての遅延関数が実行された状態で、安全に終了できることがわかっている時点で呼び出す必要がありますか?
私は実際のmain
パッケージのほとんどでこれらの行に沿って何かを行っているため、return err
規則ができるだけ早く採用され、適切な終了が得られます。
func main() {
if err := run(); err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err)
os.Exit(1)
}
}
func run() error {
err := something()
if err != nil {
return err
}
// etc
}
fasで述べたようにfunc Exit(exitcode int)
、osパッケージから持っています。
ただし、遅延関数を適用する必要がある場合は、いつでも次のdefer
ようにキーワードを使用できます。
http://play.golang.org/p/U-hAS88Ug4
すべての操作を実行し、エラー変数に影響を与え、最後にすべてがクリーンアップされると、安全に終了できます。
それ以外の場合は、panic/recover を使用することもできます: http://play.golang.org/p/903e76GnQ-
エラーが発生すると、パニックになり、キャッチ (回復) した場所でクリーンアップを終了します。
はい、実際に。os パッケージがこれを提供します。
package main
import "os"
func main() {
os.Exit(1)
}
http://golang.org/pkg/os/#Exit
編集:Exitを知っているようです。この記事では、戻る前に遅延関数を実行できる Panic の概要を説明します。これを出口と組み合わせて使用 することは、あなたが探しているものかもしれません. http://blog.golang.org/defer-panic-and-recover