1、 多個defer執行順序
如果一個函數中有多個defer語句,它們會以LIFO(后進先出)的順序執行。哪怕函數或某個延遲調用發生錯誤,這些調用依舊會被執。
示例:
package main //必須
import "fmt"
func test(x int) {
result := 100 / x
fmt.Println("result = ", result)
}
func main() {
defer fmt.Println("aaaaaaaaaaaaaaaa")
defer fmt.Println("bbbbbbbbbbbbbbbb")
//調用一個函數,導致內存出問題,除數不能為0
defer test(0)
defer fmt.Println("cccccccccccccccc")
}
#執行結果:
//先進先出原則 cccccccccccccccc bbbbbbbbbbbbbbbb aaaaaaaaaaaaaaaa panic: runtime error: integer divide by zero goroutine 1 [running]: main.test(0x0) D:/GoFiles/src/hello_01/main.go:6 +0xca main.main() D:/GoFiles/src/hello_01/main.go:18 +0x15e
