Golang中defer 閉包以及命名返回值

2021-08-21 16:59:38 字數 1787 閱讀 1139

defer後面跟普通函式

package main

func main()

func run()

func sayhello(name string)

// hello paul 只是延緩執行,實參會按照正常順序傳入函式中

defer,return和未命名的返回值

package main

func main()

func run() (string)

func sayhello(name *string)

//hello john 雖然實參提前傳入,但是傳入的是乙個指標,最後執行拿到的是經過修改過的值

//hello george

//return: name = john 未命名返回值,所以 defer 無法對返回的值進行操作的

defer、return 和命名的返回值

package main

func main()

func sayhello(name *string)

//hello john

//hello george

//return: name = george 因為使用命名返回值,所 defer 裡面依然可以對 defer 進行操作

package main

func main()

func sayhello(name string)

//hello paul 延遲執行但是按照程式順序執行,傳入的實參為 paul

//hello george 函式內修改對外面的值沒有影響

//return: name = john

defer 閉包函式

package main

func main()

func run() (string)

name = "john"

afun()

return name

}//hello john 雖然閉包定義時,外部變數 name = "paul", 但是其實只是記錄是乙個指標,所以最後執行的時候 name = "john"

//hello george

//return: name = george

package main

func main()

func run() (x string)

defer afun()

name = "john"

return name

}//hello john

//hello george

//return: name = george defer 對返回值進行了修改

package main

func main()

func run() (x string)

defer afun(x)

name = "john"

return name

}//hello paul 實參按照順序拷貝傳入 x = "paul"

//hello george

//return: name = john 因為設定了形參所以閉包內的對應的變數只是在區域性生效,不會影響外部變數

參考:

Golang中的defer使用

在golang當中,defer 塊會在函式呼叫鍊錶中增加乙個函式呼叫。這個函式呼叫不是普通的函式呼叫,而是會在函式正常返回,也就是return之後新增乙個函式呼叫。因此,defer通常用來釋放函式內部變數。為了更好的學習defer的行為,我們首先來看下面一段 func copyfile dstnam...

golang中defer和recover函式

defer語句是用來延遲執行 的,意思就是在執行一段 的時候,只有執行完畢那一時間,才會執行defer語句。而且在遇見多個defer的時候,最開始的defer會是最後乙個執行,可以通過以下 看出來 package main import fmt func main defer fmt.println...

golang中defer使用小結

golang語言中defer的使用場景較多,用於鎖的關閉,連線的延遲關閉等,通常在函式的結束時呼叫,詳細的講就是在函式結束時返回值賦值後,返回前執行defer的方法,最後才返回,另外defer確實有一定的開銷,拒絕濫用。第一點 defer 不帶函式執行,defer可以理解像棧,先進後出,看下面 fu...