Exit

Exit #

// `os.Exit` を使うと引数に渡したステータスで直ちにプログラムを終了する。

package main

import (
	"fmt"
	"os"
)

func main() {

	// `os.Exit` を使うと `defer` は実行 _されない_ 。
	// そのためこの `fmt.Println` は呼ばれない。
	defer fmt.Println("!")

	// ステータス 3 で終了する。
	os.Exit(3)
}

// C などと違って、Go は `main` 関数が返す整数型の値を使って終了ステータスを表すことはない。
// そのため、もしゼロでないステータスを返したければ、`os.Exit` を使わなければならない。
# `exit.go` を `go run` で実行すると、
# プログラム終了は `go ` に補足され、画面に表示される。
$ go run exit.go
exit status 3

# バイナリをビルドしてから実行する場合は、ターミナル上でステータスを確認できる。
$ go build exit.go
$ ./exit
$ echo $?
3

# なお、プログラムによって `!` が表示されることはない。