延期
Deferは、指定された関数の呼び出しを遅らせるために使用されます。deferは、関数内にのみ表示されます。deferの遅延特性により、deferステートメントは、リソースの再利用、リソースのクリーンアップなどに使用できます。
簡単な例
func demo1() {
defer fmt.Printf("defer execute. \n")
fmt.Printf("welcome to golang ! \n")
}
出力
golangへようこそ!
実行を延期します。
例2
var i = 0
func printI() {
fmt.Printf("i=%d \n",i)
}
func demo2() {
for ;i<10;i++ {
defer printI();
}
}
i = 10
i = 10
i = 10
i = 10
i = 10
i = 10
i = 10
i = 10
i = 10
i = 10
deferは最後に実行されるため、この時点でiはすでに10です。
例3
var j=0
func printJ(j int) {
fmt.Printf("j=%d \n",j)
}
func demo3() {
for ;j<10;j++ {
defer printJ(j);
}
}
j = 9
j = 8
j = 7
j = 6
j = 5
j = 4
j = 3
j = 2
j = 1
j = 0
関数に複数の遅延がある場合、最後のステートメントが最初に実行されます
例4
func demo4() {
defer fmt.Printf("defer execute 1. \n")
defer fmt.Printf("defer execute 2. \n")
defer fmt.Printf("defer execute 3. \n")
defer fmt.Printf("defer execute 4. \n")
}
実行を延期する4.実行を
延期する3.実行を
延期する2.
実行を延期する1。