序
本文主要研究一下golang的defer
defer
- return先賦值(對于命名返回值),然后執行defer,最后函數返回
- defer函數調用的執行順序與它們分別所屬的defer語句的執行順序相反
- defer后面的表達式可以是func或者是method的調用,如果defer的函數為nil,則會panic
實例
實例1
// f returns 42
func f() (result int) {
defer func() {
// result is accessed after it was set to 6 by the return statement
result *= 7
}()
return 6
}
這里return先給result賦值為6,之后執行defer,result變為42,最后返回42
實例2
func f() int {
result := 6
defer func() {
// result is accessed after it was set to 6 by the return statement
result *= 7
}()
return result
}
這里return確定返回值6,之后defer修改result,最后函數返回return確定的返回值
實例3
func multiDefer() {
for i := 3; i > 0; i-- {
defer func(n int) {
fmt.Print(n, " ")
}(i)
}
for i := 3; i > 0; i-- {
defer fmt.Print(i, " ")
}
}
多個defer函數,按順序逆序執行,這里輸出1 2 3
實例4
var fc func() string
func main() {
fmt.Println("hello")
defer fc()
}
由于defer指定的func為nil,這里panic
實例5
func main() {
for i := 3; i > 0; i-- {
defer func() {
fmt.Print(i, " ")
}()
}
}
由于defer這里調用的func沒有參數,等執行的時候,i已經為0,因而這里輸出3個0
小結
defer可以拆解為return賦值,defer執行,最后代碼返回三步;defer的順序按逆序執行。
doc
Defer_statements
Golang之Defer
golang中defer執行時機與常見問題
到此這篇關于聊聊golang的defer的使用的文章就介紹到這了,更多相關golang defer內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Golang之defer 延遲調用操作
- Golang學習筆記之延遲函數(defer)的使用小結
- golang中defer的關鍵特性示例詳解
- golang中defer的使用規則詳解
- Golang巧用defer進行錯誤處理的方法
- Golang 的defer執行規則說明