在Golang中,defer
和 return
的執行順序是一個重要的特性,它們的執行順序如下:
- return語句不是一條單獨的語句,實際上,它是由賦值和返回兩部分組成的。賦值步驟會先執行,這一步會計算return語句中的表達式,然后賦值給返回值。
- defer語句在函數返回前(即return語句后的返回動作執行前)執行。如果有多個defer語句,那么它們會以LIFO(后進先出,即棧)的順序執行。
- 返回動作,這是return語句的第二部分,這一步會攜帶返回值返回到調用函數。
所以,如果你在一個函數中寫入了defer
和return
,那么它們的執行順序是:先執行return
語句的賦值部分,然后執行defer
語句,最后執行return
語句的返回動作。
package mainimport "fmt"func foo() (result int) {defer func() {// 修改返回值result++}()return 0 // return語句的賦值部分先執行,然后執行defer,最后執行return的返回動作
}func main() {fmt.Println("Final result:", foo())
}
輸出結果為:
在這個例子中,函數foo
會返回1
,而不是0
。因為return 0
是先賦值result
為0
,然后defer
函數把result
增加了1
,最后返回result
,所以返回值是1
。
最后給大家推薦一個LinuxC/C++高級架構系統教程的學習資源與課程,可以幫助你有方向、更細致地學習C/C++后端開發,具體內容請見 https://xxetb.xetslk.com/s/1o04uB