go語言基礎之多個defer執行順序


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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM