Go 語言 函式defer的使用

2021-10-02 06:51:17 字數 783 閱讀 2955

在函式中,經常需要建立資源(比如:資料庫的連線、檔案、鎖等),為了在函式執行完畢後,及時釋放資源,go 提供了defer(延時機制)

舉個栗子

package main

import

"fmt"

// 當執行到defer 時, 暫時不會執行, 會將defer 後面的語句 壓入到 棧中(特點:先進後出)

// 當函式執行完畢後, 在從 棧中 依次取出 並執行

func sum

(num1 int, num2 int) int

func main()

// 輸出結果:

ok3 result 30

ok2 num2=

20ok1 num1=

10main

()函式結果 30

當 go 執行到乙個defer時, 不會立即執行 defer 後語句,而是將 defer 後的語句壓入到棧中(先進後出),然後繼續執行函式下乙個語句。

函式執行完畢後,在從defer 棧中,依次從 棧頂取出語句執行

func sum

(num1 int, num2 int) int

// 輸出結果:

ok3 result 32

ok2 num2=

20ok1 num1=

10main

()函式結果 32

go語言defer的使用

go語言的defer 延遲執行 語句,是在函式結束前執行,而如果在函式中有多個defer語句時,會像乙個堆疊一樣,先進後出,後進先出。defer語句在進行一些開啟資源的操作時,遇到錯誤需要提前返回,在返回前你需要關閉相應的資源,不然很容易造成資源洩露等問題上很試用。舉個defer語句簡單的使用如下 ...

Go語言中defer的使用

func print a int func add a,b int int fmt.println add 4,3 上面這段 defer語句輸出的是4,add返回的值是7。defer可以用於檔案的開啟和關閉,鎖的開啟和關閉。package ioutil func readfile filename ...

go語言defer與匿名函式

學習go語言的時候,遇到了乙個例子 func main defer func a int a a 0 a 1 a 2 a 3 defer func 這裡定義了乙個匿名函式,該匿名函式由defer修飾,意味著,該函式會在主函式return之後,執行,所有被defer修飾的函式會被壓入棧中,先被修飾的後...