1. ホーム
  2. error-handling

goのエラーコードで終了?

2023-10-09 15:17:45

質問

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

のドキュメントでは 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
}