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 引用閉包時,在這個引用的...