【Golang】deferへ渡した関数が複数ある場合の処理順序

この記事では、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へ複数の関数を渡した場合の処理順序についてまとめました。

参考になれば幸いです。

参考資料

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

未経験でSESから従業員300名以上の自社開発企業に転職しました。業務や個人開発で直面した問題や、転職・学習の経験を発信していきます。

コメント

コメントする

目次