函数
基本表达
func funcName(parametername type1, parametername type2) (output1 type1, output2 type2) {
//这里是处理逻辑代码
//返回多个值
return value1, value2
}
可变参
先定义函数可接收可变参
func myfunc(arg ...int) {}
arg …int表示这个函数可以接受不定数量的参数。
可变参实际上是切片
注意事项:
1.如果一个函数的参数,是可变参数,同时还有其他参数,可变参数要放在参数列表的最后
2.一个参数列表中最多只能由一个可变参数
函数是一种特殊的变量
实际上函数是一种变量,可以直接使用var定义
//此时的函数为nil(空)
var c func(int,int)
//可以将同类型的函数赋值给c
c=f //f为已声明的函数
//也可以
f1:=f
匿名函数
定义在主函数中,一般只能用一次
package main
import "fmt"
func main() {
func() {
fmt.Println("这是一个匿名函数")
}() //通过这个小括号直接调用函数,括号里放参数
}
也可以将匿名函数赋值给其他函数,实现多次调用
fun := func() {
fmt.Println("这是一个匿名函数")
} //此时不使用小括号调用匿名函数
fun() //fun可以多次调用
回调函数
将其他函数作为参数,并进行调用
例如
func add(a,b int) int {
return a+b
}
func oper(a,b int,fun func(int,int)int) int {
fmt.Println(a,b,fun) //打印数值
res:=fun(a,b)
return res
}
闭包
go语言支持函数式的表达
支持将一个函数作为另一个函数的参数
也支持函数将另一个函数作为函数返回值
func increment()func()int {
return func() int{
fmt.Println("改函数作为increment函数的返回值")
}
}
一个外层函数中,有内层函数,该内层函数中会操作外层函数的变量
func increment()func()int {
i:=1
return func() int{
fmt.Println(i)
}
}