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()函数。