序
本文主要研究一下golang的defer
defer
實例
實例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,之后執(zhí)行defer,result變?yōu)?2,最后返回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,最后函數(shù)返回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函數(shù),按順序逆序執(zhí)行,這里輸出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這里調(diào)用的func沒有參數(shù),等執(zhí)行的時候,i已經(jīng)為0,因而這里輸出3個0
小結(jié)
defer可以拆解為return賦值,defer執(zhí)行,最后代碼返回三步;defer的順序按逆序執(zhí)行。
doc
Defer_statements
Golang之Defer
golang中defer執(zhí)行時機(jī)與常見問題
到此這篇關(guān)于聊聊golang的defer的使用的文章就介紹到這了,更多相關(guān)golang defer內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:河池 鷹潭 保定 武漢 宜春 黔西 松原 泰安
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《聊聊golang的defer的使用》,本文關(guān)鍵詞 聊聊,golang,的,defer,使用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。