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