gitkadoの気まぐれ日記

島根在住エンジニアが何かに興味を持ったらブログを更新します

Go備忘録 -defer-

Go備忘録 -defer-

  • 呼び出し元関数が終了(return)するまでdeferに与えた関数は評価されない。
  • deferに与えた関数の引数などは、その時点の値で実行される。
  • 呼び出し元関数でdeferを複数実行している場合は、あとで呼ばれたdeferが先に評価される。

実行

package main

import "fmt"

func main() {
    i := 1
    defer fmt.Println(i)
    i ++
    defer fmt.Println(i)
    i ++
    fmt.Println("func return")
}
// 実行結果
func return
2
1

参考

go-tour-jp.appspot.com