1.高阶函数和回调函数的定义
根据Go语言的数据类型特点,可以将一个函数作为另外一个函数的参数
例如:
现在有fun1() , fun2()两个函数,当我们把fun1作为fun2这个函数的参数时。
fun2函数:称之为高阶函数
- 接收一个函数作为参数的函数,高阶函数的定义
fun1函数:称之为回调函数
- 作为另一个函数的参数的函数,回调函数的定义
/**
* @author ly (个人博客:https://www.cnblogs.com/qbbit)
* @date 2023/5/15 21:18
* @tags 喜欢就去努力的争取
*/
package main
import "fmt"
func main() {
// 求两个数的加减乘除运算
fmt.Printf("%T\n", add)
fmt.Printf("%T\n", oper)
// 调用函数
res := add(1, 2)
fmt.Println(res)
res2 := oper(10, 20, add)
fmt.Println(res2)
/**
oper : 高阶函数
add、sub、mul、div、mod: 回调函数
*/
res3 := oper(100, 5, sub)
fmt.Println(res3)
res4 := oper(100, 10, mul)
fmt.Println(res4)
res5 := oper(100, 20, div)
fmt.Println(res5)
res6 := oper(100, 50, mod)
fmt.Println(res6)
// 使用匿名函数的方式
fun1 := func(a, b int) int {
return a + b
}
res7 := oper(10, 20, fun1)
fmt.Println(res7)
res8 := oper(100, 200, func(x int, y int) int {
return x * y
})
fmt.Println(res8)
}
func add(a, b int) int {
return a + b
}
func sub(a, b int) int {
return a - b
}
func mul(a, b int) int {
return a * b
}
func div(a, b int) int {
return a / b
}
func mod(a, b int) int {
return a % b
}
func oper(a, b int, fun func(int, int) int) int {
fmt.Println(a, b, fun)
return fun(a, b) // 函数的具体回调处
}
标签:oper,20,函数,int,fmt,func,Println,高阶
From: https://www.cnblogs.com/qbbit/p/17403239.html