1. 程式人生 > >GoLang學習筆記(十二)匿名函式及回撥用法

GoLang學習筆記(十二)匿名函式及回撥用法

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