defer
Defer is used to delay calling the specified function. Defer can only appear inside the function. Because of the delay characteristics of defer, the defer statement can be used to reclaim resources, clean up resources, etc.
Simple example
func demo1() {
defer fmt.Printf("defer execute. \n")
fmt.Printf("welcome to golang ! \n")
}
Output
welcome to golang !
defer execute.
Example 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
Because defer is executed last, i is already 10 at this time
Example 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
When a function has multiple defers, the last statement is executed first
Example 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")
}
defer execute 4.
defer execute 3.
defer execute 2.
defer execute 1.