funcmain(){test("张三", sayHello)}funcsayHello(name string){
fmt.Println(name)}// 参数作为函数functest(name string, f func(string)){f(name)}
GO
返回值为函数
funcmain(){
f1 :=cal("+")(1,2)
fmt.Println(f1)
f2 :=cal("-")(2,1)
fmt.Println(f2)}funcadd(a int, b int)int{return a + b
}funcsub(a int, b int)int{return a - b
}funccal(oprator string)func(int,int)int{switch oprator {case"+":return add
case"-":return sub
default:returnnil}}
GO
匿名函数
funcmain(){
result :=func(a int, b int)int{return a + b
}(1,2)// 后面加括号代表直接调用,等价于 result(1,2)
fmt.Println(result)}
GO
闭包
简单来说,闭包就是在函数内部的函数,闭包 = 函数 + 引用环境
funcmain(){// 变量f接收了一个函数,是一个闭包,f在变量 f 的生命周期内,变量 x 也一直有效
f :=add()
fmt.Println(f(10))
fmt.Println(f(20))
fmt.Println(f(30))
fmt.Println("-----------")
f1 :=add()
fmt.Println(f1(1))
fmt.Println(f1(2))
fmt.Println(f1(3))}// 返回一个函数funcadd()func(int)int{var x intreturnfunc(y int)int{
x += y
return x
}}
评论已关闭