go言語 defer文について

go言語 defer文について

golangでdeferステートメントを利用すると指定した処理を関数内で最後に実行することができる。ここでは、deferステートメントを使って、実行結果から挙動を確認するサンプルコードを記載。

環境

  • OS  windows10 pro
  • go 1.13.8

deferサンプルコード

コメントアウトしてあるが、同一関数内に複数のdeferが存在する場合は、 行末から実行される

package main

import "fmt"

func main() {
	// main関数の最後に実行される
	defer fmt.Println("defer-1")
	// 関数内にdeferが複数あると最初に記述されたdeferが最後に実行される
	defer fmt.Println("defer-2")
	// hello関数事項
	hello()
	fmt.Println("world")
}

func hello() {
	// hello関数の最後に実行される
	val := "hello"
	// 最後に実行されるが、helloと表示される
	defer fmt.Println(val)
	val = "baybay"
	fmt.Println("first")
}

実行結果

first
hello
world
defer-2
defer-1