GoLang學習筆記(十二)匿名函式及回撥用法
阿新 • • 發佈:2018-12-04
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()函式。