Go返回匿名函式和Defer

2021-10-07 02:19:04 字數 1157 閱讀 4377

go中有return func(param1 paramtype1, param2 paramtype2, …, param paramtype) (returntype1, returntype2,…)

返回乙個匿名函式的指標,我們在列印時可以列印出這個函式的位址。也可以通過返回值呼叫這個方法。舉例說明

type

( annofunc func

(param string

)error

)func

main()

// annofunc 是在type自定義的乙個型別,也可以直接寫成func(param string) error

func

ann(tag string

) annofunc

}

返回值為

0x4918c0

***x:123456

func

opnefile

(filepath string

)defer fd.

close()

}

舉例乙個**的

func

deferreturn()

(ret int)(

)return10}

//返回11

這個比較**,在ret返回為10後,將該返回值再加1。因為返回值也可以在go語言中當成乙個區域性變數

如果defer 語句出現在return之後,那麼該defer語句不會被執行。

多個defer語句是逆序執行,出現的越晚月先執行。

如果defer語句出現在panic(丟擲異常用的)後,那麼該defer也不會被呼叫。

1、第一步給返回值賦值(若是有名返回值直接賦值,匿名返回值 則 先宣告再 賦值) ;

2、第二步呼叫ret返回指令並傳入返回值,ret會檢查是否存在defer語句,若存 在就先逆序插播 defer語句 ;

3、最後 ret 攜帶返回值退出函式 。

defer、 return、返回值 三者的執行順序是 : return 最先給返回值賦值;接著 defer 開始執行一些收尾工作;最後 ret 指令攜帶返回值退出函式。

以上參考自

go語言defer與匿名函式

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

Go 延遲函式 defer 詳解

go 語言中延遲函式 defer 充當著 try.catch 的重任,使用起來也非常簡便,然而在實際應用中,很多 gopher 並沒有真正搞明白 defer return 返回值 panic 之間的執行順序,從而掉進坑中,今天我們就來揭開它的神秘面紗!先來執行下面兩段 package main im...

go 匿名函式

當不想給函式命名時,可以使用匿名函式,匿名函式不能獨立存在,必須將匿名函式賦值給某個變數,然後通過這個變數呼叫對應的匿名函式 示例 func main fmt.println fpx 1,2 輸出結果 3 func main func add2 func b int int 引用閉包時,在這個引用的...