Go语言支持匿名函数,即在需要使用函数时,再定义函数。
匿名函数没有函数名,只有函数体,函数可以被作为一种类型被赋值给变量,匿名函数也往往以变量的方式被传递。
匿名函数经常被用于实现回调函数、闭包等。
定义格式:
func(参数列表)(返回参数列表){
//函数体
}
方式一,在定义时调用匿名函数
func anonymousFunc1() {
func(data int) {
fmt.Println("hello", data)
}(100)
}
这里的100,实际就是给出了匿名函数的参数。
方式二,将匿名函数复制给变量
func anonymousFunc2() {
f := func(data string) {
fmt.Println(data)
}
f("Hello")
}
方式三,有返回参数的,后面必须有return
func anonymousFunc3() {
aaa := func(data int) int {
return data * 2
}
fmt.Println(aaa(100))
}
方式四,作为回调函数
先写一个遍历切片,对切片进行操作的函数
type myFunc1 func(f float64) string
func filterSlice(arr []float64, f myFunc1) []string {
var result []string
for _, val := range arr {
result = append(result, f(val))
}
return result
}
再对这个函数进行回调使用
func anonymousFunc4() {
arr := []float64{1, 9, 16, 25, 30, 36, 49}
//将匿名函数作为值
result := filterSlice(arr , func(val float64) string {
//math.Sqrt求平方根
val = math.Sqrt(val)
return fmt.Sprintf("%.2f" , val)
})
fmt.Println(result)
}
这就是遍历切片,并对其求平方根的方法,如果需要计算其他的结果,仅需修改其中的math.Sqrt()函数。