Golang の defer について

defer とは

関数内で defer を使うと、
その関数の処理が全て終了した後に defer の行に書いた処理が行われる。
複数 defer が存在する場合は、行末の defer から処理が行われる。

defer.go

package main

import (
	"fmt"
)

func main() {
	fmt.Printf("main: 1\n")
	test()
	fmt.Printf("main: 2\n")
	test2()
}

func test() {
	fmt.Printf("test: 1\n")

	defer fmt.Printf("test: 2\n")

	fmt.Printf("test: 3\n")
}

func test2() {
	fmt.Printf("test2: 1\n")

	defer fmt.Printf("test2: 2\n")
	defer fmt.Printf("test2: 3\n")
	defer fmt.Printf("test2: 4\n")

	fmt.Printf("test2: 5\n")
}
$ go run defer.go

main: 1
test: 1
test: 3
test: 2
main: 2
test2: 1
test2: 5
test2: 4
test2: 3
test2: 2
カテゴリー:Go