函数值字面量是一种表达式,它的值被称为匿名函数。
从形式上看当我们不给函数起名字的时候,可以使用匿名函数,例如:
func(x, y int) int { return x + y }
这样的函数不能够独立存在,但可以被赋值于某个变量,即保存函数的地址到变量中:
fplus := func(x, y int) int { return x + y }
然后通过变量名对函数进行调用:
fplus(3, 4)
当然,也可以直接对匿名函数进行调用,注意匿名函数的最后面加上了括号并填入了参数值,如果没有参数,也需要加上空括号,代表直接调用:
func(x, y int) int { return x + y } (3, 4)
下面是一个计算从 1 到 1 百万整数的总和的匿名函数:
func() {
sum := 0
for i := 1; i <= 1e6; i++ {
sum += i
}
}()
参数列表的第一对括号必须紧挨着关键字 func,因为匿名函数没有名称。花括号 {} 涵盖着函数体,最后的一对括号表示对该匿名函数的调用。下面代码演示了上面的几种情况:
package main
import (
"fmt"
)
func main() {
fn := func() {
fmt.Println("hello")
}
fn()
fmt.Println("匿名函数加法求和:", func(x, y int) int { return x + y }(3, 4))
func() {
sum := 0
for i := 1; i <= 1e6; i++ {
sum += i
}
fmt.Println("匿名函数加法循环求和:", sum)
}()
}
程序输出:
hello
匿名函数加法求和: 7
匿名函数加法循环求和: 500000500000
下一节:匿名函数同样也被称之为闭包。