go 語言匿名函數

在C++ 11 中有 lambda 函數,如下代碼所是:

<code>

auto

myFunc = [](

int

a,

int

b)->

int

{

return

a+b; };

printf

(

"%d"

, myFunc(

1

,

2

));/<code>

同樣在go語言中也有類似lambda的函數。在Go語言中,lamda、匿名函數和內聯函數的實現稱作函數字面量(function literals),當一個函數足夠小的時候,你可以創建一個函數字面量。

<code>myFunc := 

func

(a

int

, b

int

)

int

{

return

a+b; } fmt.Printf(

"%d"

,myFunc(

1

,

2

))/<code>

上面是將定義的匿名函數賦值給一個變量myFunc, 後面通過調用myFunc(1,2)來獲得調用的值。

go的匿名函數還可以直接調用,代碼如下:

<code>res := 

func

(a

int

,b

int

)

int

{

return

a+b }(

1

,

2

) fmt.Printf(

"%d"

,res)/<code>

res 將直接返回調用匿名函數的值。

go的匿名函數還可以被定義為全局變量,代碼如下:

<code>

var

MyFunc =

func

(a

int

,b

int

)

int

{

return

a+b } fmt.Printf(

"%d"

, MyFunc(

1

,

2

))/<code>

總結:

擁有函數名的函數只能在包級語法塊中被聲明,通過函數字面量(function literal),我們可繞過這一限制,在任何表達式中表示一個函數值。函數字面量的語法和函數聲明相似,區別在於func關鍵字後面沒有函數名,函數值字面量是一種表達式,它的值被成為匿名函數(anonymous function)。


go 語言匿名函數


分享到:


相關文章: