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