76

エラーコードでプログラムを終了する慣用的な方法は何ですか?

のドキュメントにExitは、「プログラムはすぐに終了します。遅延関数は実行されません。」と書かれており、log.Fatal単にExit. 凶悪なエラーではない場合、遅延関数を実行せずにプログラムを終了するのは極端に思えます。

エラーが発生したことを示す状態を渡してから、Exit(1)すべての遅延関数が実行された状態で、安全に終了できることがわかっている時点で呼び出す必要がありますか?

4

5 に答える 5

97

私は実際の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
}
于 2013-09-23T22:30:05.973 に答える
3

fasで述べたようにfunc Exit(exitcode int)、osパッケージから持っています。

ただし、遅延関数を適用する必要がある場合は、いつでも次のdeferようにキーワードを使用できます。

http://play.golang.org/p/U-hAS88Ug4

すべての操作を実行し、エラー変数に影響を与え、最後にすべてがクリーンアップされると、安全に終了できます。

それ以外の場合は、panic/recover を使用することもできます: http://play.golang.org/p/903e76GnQ-

エラーが発生すると、パニックになり、キャッチ (回復) した場所でクリーンアップを終了します。

于 2013-09-23T17:37:21.070 に答える
-1

はい、実際に。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

于 2013-09-23T17:17:23.250 に答える