在函式中,經常需要建立資源(比如:資料庫的連線、檔案、鎖等),為了在函式執行完畢後,及時釋放資源,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修飾的函式會被壓入棧中,先被修飾的後...