golang——函数类型
- 函数类型
type calc func(int,int) int
func add(x,y int) int {
return x+y
}
func sub(x,y int) int {
return x-y
}
func main(){
var c calc
c=sub
fmt.Printf("%v %T",c(1,2),c)
}//3 main.calc
- 匿名函数
type calcType func(int,int)int
func calc(x,y int,cb calcType) int{
return cb
}
func main(){
j:=calc(3,4,func(x,y int)int{
return x*y
})
fmt.Println(j)
}//12
- 递归
func sum(n int) int {
if n > 1 {
return n + sum(n-1)
} else {
return 1
}
}
- 闭包:定义在函数内部的函数,是将函数内部和函数外部连接起来的桥梁
全局变量:常驻内存 污染全局
局部变量:不污染内存 不污染全局
闭包:可以让变量常驻内存 可以让变量不污染全局
闭包有权访问另一个函数作用域中变量的函数
由于闭包中作用域返回的局部变量不会被销毁,所以会占用大量内存,导致性能下降
func a() func() int {
i := 0
b := func() int {
i++
// fmt.Println(i)
return i
}
return b
}
func main() {
c := a()
fmt.Println(c())//1
fmt.Println(c())//2
fmt.Println(c())//3
fmt.Println(c())//4
}