go 函数
go函数的规范
func g(){ ///大括号的顺序不能乱
}
函数类型
指定函数类型
1.type FUNCTION func()
2.type FUNCTION1 func(int,int)
3. type FUNCTION2 func(int,int)int
函数返回
1. func f1(s int)int{
retrun s+2
}
2. func f1(s int,b int)(sum int){
sum = s+b
return
}
3. func f2(a int,b int ,c int){
a b,cb:=1,2,3
return
}
a,b,c:=f2()
匿名函数
-
匿名内部函数 func main(){ a:=10 b:=20 // 匿名函数 带返回值 func (a int b int){ retrun(a+b) }(a,b) 这是直接使用匿名
// 这是将匿名函数赋予变量 f:=func (a int, b int){ return(a+b) }
}
//若是无参无返匿名函数 func(){} = {}
闭包
格式为:func 函数名() 返回函数类型(){}
举例:
func f1() func() int{
var a int
return func() int{
a++
return a
}
} 封装
func main{
f:=f1()
fmt.Println(f())
} 调用
闭包需要声明接收参数类类型
///
1. 闭包函数可以相当于生成器 会保留上次调用运行的变量结果继续下一次运行
示范如下:
func squares() func() int {
var x int
return func() int {
x++
return x * x
}
}
func main() {
f := squares() //返回函数指针
fmt.Printf("%v\n", f)
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Printf("%v\n", f)
}
运行结果
0x401620
1
4
9
16
0x401620
递归函数
举例:
var sum int = 1
func digui(a int) int {
if a <= 1 {
return sum
}
sum += a
fmt.Println(sum, a)
return digui(a - 1)
}
func main() {
d := digui
fmt.Println(d(6000))
}
匿名函数
规则 fun(参数)返回值 返回类型{ //参数可加可不加 返回值与类型都是
代码块
}() // 这个地方假如加括号为匿名函数调用 不加不自动使用
特性注意点
1. 闭包函数可以相当于生成器 会保留上次调用运行的变量结果继续下一次运行