go-函数
函数声明
go中函数传参,都是copy传递,即值传递
有名函数
// 有参无返回值
func funcname1(x int, y string){} // 形参名,形参类型,不可指定默认值
func funcname2(x,y int, z string){} // 形参类型相同时,可简写
funcname2(1,2,"hello") // 只能按照位置形参传参,没有关键字传参
// 有参有返回值
func funcname(x int, y string)(s1 int, s2 string){ // 指定返回值类型,返回一个时可不加括号
// 定义时指定了返回s1,已经完成了变量声明,在函数体中可以直接使用,否则需要主动声明
s1 = 10
s2 = "haha"
// 按照指定的返回形式返回结果,包括顺序,类型,个数
// 当指定了所有的返回值时,只需要写return即可
// 当指定的返回值s1没有值时,默认返回它的类型的零值
return s1,s2
}
s1,_ := funcname(19,"hei") //_代表忽略该返回值,是真正的忽略,_不是变量
// 可变长参数
func funcname(x string, y ...int){ // 相当于python中的*args,只能有一个,并且是最后yi'ge
/*
x: 接收一个字符串
y: 接收任意多个int类型数据,存入[]int切片y中
*/
fmt.Println(y, x)
}
匿名函数(头等函数)
// 即声明函数时,不声明函数名
func (){}
// 要么直接加括号运行
func (){}()
// 要么被变量接收
a := func(){}
函数变量
函数变量的类型
// 函数变量的类型包括函数func关键字,形参类型,返回值类型
func test1(){} // 类型:func ()
func test2(x int, y string){} // 类型:func(int,string)
func test3(x int, y string)(z int){} //类型:func(int,string) int
func test4(x int, y string)(z int, f func()) // 类型:func(int,string)(int, func())
嵌套函数
// 在局部中定义函数只能使用匿名函数,不能使用有名函数,负责会报错
func test(x int, y int)(s int, c string,f func()){
a := func(){}
return x+y+1, "ok", a
}
闭包函数
// 闭包函数:定义在函数内部,并且引用了外部的作用域
func test(x int, y int)(s int, c string,f func()){
a := func(){
z := x+10
fmt.Println(z)
}
return x+y+1, "ok", a
}

浙公网安备 33010602011771号