首页 > 编程笔记

Go语言匿名函数的用法

没有名字的函数称为匿名函数,就是这种函数没有具体的函数名,将整个函数作为变量,以变量方式使用。匿名函数有两种使用方式:函数定义并使用、函数以函数变量表示。

函数定义并使用是在函数定义的时候就开始执行函数调用,这种方式只会在程序中执行一次,因为函数只会执行一次定义,所以无法实现函数多次调用,示例如下:
package main

import (
    "fmt"
)

func main() {
    res := func(n1 int, n2 int) int {
         return n1 + n2
    }(10, 30)
    fmt.Printf("函数执行结果为:%v\n", res)
}
上述代码的匿名函数是用关键字 func 定义的,关键字func后面直接设置函数参数和返回值的数据类型,函数定义之后再设置参数值,如 (10, 30)是直接调用匿名函数,函数返回值赋予变量 res,程序运行结果为:

函数执行结果为:40


如果匿名函数以函数变量方式表示,再通过函数变量方式实现匿名函数调用,这样在程序中能多次调用匿名函数,示例如下:
package main
import (
    "fmt"
)
func main(){
    // 将匿名函数赋给函数变量myfun
    myfun := func (n1 int, n2 int) int {
         return n1 - n2
    }

    // 变量myfun的数据类型是函数类型,可以由该变量完成函数调用
    res2 := myfun(10, 30)
    res3 := myfun(50, 30)
    fmt.Printf("匿名函数调用第一次:%v\n", res2)
    fmt.Printf("匿名函数调用第二次:%v\n", res3)
    fmt.Printf("函数变量myfun的数据类型:%T\n", myfun)
}
上述代码将整个匿名函数作为函数变量表示,只要在函数变量 myfun 后面使用小括号,即可实现匿名函数的调用,运行结果为:

匿名函数调用第一次:-20
匿名函数调用第一次:20
函数变量myfun的数据类型:func(int, int) int

如果匿名函数作为模块或包中的某个功能函数,需要被其他 go 文件的程序调用,可以将函数变量的首个字母设为大写,这是把函数变量设为导出标识符。

推荐阅读