开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map :匿名函数】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/625/detail/9606
匿名函数
目录
一、 介绍
二、 匿名函数使用方式1
三、 匿名函数使用方式2
四、 全局匿名函数
一、介绍
Go 支持匿名函数,匿名函数就是没有名字的函数,如果我们某个函数只是希望使用一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用。匿名函数出现在很多的编程语言中,一般情况下函数都是有名字的。
二、匿名函数使用方式1
1、在定义匿名函数时就直接调用,这种方式匿名函数只能调用一次。调用过后就不可以再次调用了,匿名函数没有名字,也没有给匿名函数变量。有时候并不希望定义函数,只想调用函数,这时候就可以用匿名函数。
2、案例说明:
package main
import (
"fmt"
)
func main() {
//在定义匿名函数时就直接调用,这种方式匿名函数只能调用一次
//案例演示,求两个数的和,使用匿名函数的方式完成
res1 := func (n1 int, n2 int) int i
return n1 + n2
}(10,20)
fmt.Println( "res1=", res1)
}
3、代码说明:
第一种调用方式在定义匿名函数时就直接调用,这种方式匿名函数只能调用一次。求两个数的和,使用匿名函数的方式完成,n1 int,n2 int 返回一个 int,返回n1+n2。直接在后面输入 n1,n2用一个变量来接收。在定义匿名函数时就传参了。输出结果 fmt.Println( "res1=", res1) res1=30,结果相符。
三、匿名函数使用方式2
1、将匿名函数赋给一个变量(函数变量),再通过该变量来调用匿名函数。
2、案例说明:
package main
import (
"fmt"
)
func main()
{
//在定义匿名函数时就直接调用,这种方式匿名函数只能调用一次
//案例演示,求两个数的和,使用匿名函数的方式完成
res1 := func (n1 int, n2 int) int {
return n
1
+n2
}
(1
0
,20)
fmt.Print
l
n( "res1=", res1)
//将匿名函数func (n1 int, n2 int) int赋给a变量
//则a的数据类型就是函数类型,此时,我们可以通过a完成调用
a
:= func (n1 int, n2 int) int i
return nl
1
- n2
I
res2 := a( 10,30)
fmt.Print
l
n( "res2=", res2)
res3 := a(9
0
,30)
fmt.Print
l
n( "res3=", res3)
}
3、结果输出:
res1= 30
res2=-20
res3=60
4、代码分析
求两个数的差,将匿名函数 func (n1 int, n2 int) int 赋给 a 变量,则 a 的数据类型就是函数类型,此时,可以通过 a 完成调用,res2 :=a(10,30),a 可以反复调用,但 a 不是函数名。将定义的匿名函数交给一个变量,通过变量完成调用。在某些情况下用这种函数可以完成特殊的需求。
四、全局匿名函数
1、如果将匿名函数赋给一个全局变量,那么这个匿名函数,就成为一个全局匿名函数,可以在程序有效。
var (
//fun1就是一个全局匿名函数
Fun1 = func (n1 int, n2 int) int f
return n1 * n2
}
)
//全局匿名函数的使用
res4 :=Fun1(4,9)
fmt.Println(
“
res4=
”
,res4)
2、代码解析:
交给一个变量,Fun1为全局匿名函数对应的变量,把匿名函数交给全局变量,此时Fun1就是一个全局匿名函数,在整个程序都是有效的。全局匿名函数的使用,res4 :=Fun1(4,9) fmt.Println(“res4=”,res4)
结果输出36。
在实际的开发中,用的比较多的是匿名函数使用方式1。