Defer
Golangのspecificationの日本語訳と、ちょっとした遊びぐらいのコードを載せていく感じで進めようと思うので、
すでにGolangでコードを書いている人にはつまらないかもしれないです
また、間違っている部分があればぜひご指摘いただけると嬉しいです🙇♂️
想定する読者層
- Golang初めてそこまで期間が経っていない
- 英語の公式読むの辛い
Defer statements
本記事は公式のドキュメントを参考にしています
- https://golang.org/ref/spec#Defer_statements
Deferは以下のような状況になるまで関数の実行を遅延します
- 関数がreturnを返す時
- goroutinがpanicになった時
Deferの使用方法
defer function
サンプルプログラム
例えば以下のようなプログラムの場合、main関数がreturnされる直前に defer print(s)
が呼び出されて出力される値が入れ替わっているように見えます。
package main
import (
"fmt"
)
func main() {
s := "Hello, playground"
print(s)
defer print(s)
fmt.Println("before return")
}
func print(s string) {
fmt.Println(s)
}
Hello, playground
before return
Hello, playground
[The Go Programming Language Specification] Channel についてもぜひ、ご一読ください。