在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
, bint
)int
{return
a+b; } fmt.Printf("%d"
,myFunc(1
,2
))/<code>
上面是將定義的匿名函數賦值給一個變量myFunc, 後面通過調用myFunc(1,2)來獲得調用的值。
go的匿名函數還可以直接調用,代碼如下:
<code>res :=func
(a
int
,bint
)int
{return
a+b }(1
,2
) fmt.Printf("%d"
,res)/<code>
res 將直接返回調用匿名函數的值。
go的匿名函數還可以被定義為全局變量,代碼如下:
<code>var
MyFunc =func
(a
int
,bint
)int
{return
a+b } fmt.Printf("%d"
, MyFunc(1
,2
))/<code>
總結:
擁有函數名的函數只能在包級語法塊中被聲明,通過函數字面量(function literal),我們可繞過這一限制,在任何表達式中表示一個函數值。函數字面量的語法和函數聲明相似,區別在於func關鍵字後面沒有函數名,函數值字面量是一種表達式,它的值被成為匿名函數(anonymous function)。