Goでos.Exitを呼ぶと同じ関数内のdeferが実行されない。

Go

os.Exit()を呼ぶと同じ関数内のdeferが実行されないという情報を発見。
panicなら納得だけoExitでもdefer実行されない。
deferステートメントは関数がリターンする直前に呼び出されるという仕様から考えれば、そりゃそうなるか。
対処方法はExit呼び出す関数ではdeferせずに、別の関数を呼び出した中でdeferするようにすればいい。


func main() {
    err := funcMain()
    if err != nil {
        os.Exit(1)
    }
}
func funcMaint() error {
    /*~~*/
    if (err != nil) {
        return err
    }
    return nil
} 

この記事へのコメント

最近のトラックバック