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