Go语言的函数本身可以作为值进行传递,既支持匿名函数和闭包,又能满足接口。
函数声明
func 函数名 (参数列表)(返回参数列表){ // 函数体 } func funcName(parametername type1,parametername type2 ...)(output1 type1 , utput2 type2){ //逻辑代码 //返回多个值 return value1,value2 }
参数类型简写
在参数列表中,如果有多个参数变量,则以逗号分隔;如果相邻变量是同类型,则可以将类型省略
func add(a,b int){ }
Go语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑。
函数变量
在Go语言中,函数也是一种类型,可以和其他类型(如int32、float等等)一样被保存在变量
匿名函数
Go语言支持匿名函数,即在需要使用函数时再定义函数。匿名函数没有函数名,只有函数体,函数可以作为一种类型被赋值给变量,匿名函数也往往以变量方式被传递。
匿名函数经常被用于实现回调函数,闭包等。
func(参数列表) (返回参数列表){ // 函数体 }
1. 在定义时调匿名函数
package main import ( "fmt" ) func main() { func(name string){ fmt.Println("hello",name) }("huahua") }
2. 将匿名函数赋值给变量
package main import "fmt" // 将匿名函数赋值给变量 func main() { f:= func(name string) { fmt.Println("hello "+name) } f("sixinshuier") }
3. 匿名函数用作回调函数
package main import ( "fmt" "math" ) func main() { arr := []float64{1,4,36,30} // 求平方 visit(arr, func(v float64) { v = math.Pow(v,2) fmt.Printf("%.2f ",v) }) //求平方跟 visit(arr,func(v float64){ v =math.Sqrt(v) fmt.Printf("%0.0f ",v) }) } func visit(list []float64, f func(float64)){ for _,value := range list{ f(value) } }