この記事では、Goのdeferへ渡した関数が複数ある場合の処理順序についてまとめます。
最後まで読めば、どのような実行順序になるのか正しく理解できるはずです。
記事におけるGoのバージョンはgo1.23.4 darwin/amd64です。
目次
【Golang】deferへ渡した関数が複数ある場合の処理順序
deferへ渡した関数が複数ある場合、最後に渡した関数が最初に実行され、最初に渡した関数は最後になります。
データ構造でいうとスタック、つまりLIFO(last-in-first-out)の順番で実行されるのです。
実際に試す
以下のサンプルで試します。
main.go
package main
import "fmt"
func main() {
defer fmt.Println(1)
defer fmt.Println(2)
defer fmt.Println(3)
fmt.Println("Hello, world!")
}
実行結果は次のようになります。
Plaintext
$ go run main.go
Hello, world!
3
2
1
最初にdeferへ渡したfmt.Println(1)
が最後に、最後に渡したfmt.Println(3)
が最初に実行されていることが確認できました。
おわりに
この記事ではdeferへ複数の関数を渡した場合の処理順序についてまとめました。
参考になれば幸いです。
コメント