Golang – 使用闭包Closure封装CallBack Function或Function Factory
闭包通常可以封装成callback function或是封装成function factory
Callback Function代码范例
package main
import "fmt"
// process 函数接受一个整数数组 nums 和一个回调函数 fn,将 nums 中的每个元素传递给 fn 执行。
func process(nums []int, fn func(int)) {
for _, n := range nums {
fn(n)
}
}
func main() {
nums := []int{1, 2, 3, 4, 5}
// 调用 process 函数,并传入一个匿名函数作为回调函数,打印每个元素。
process(nums, func(n int) {
fmt.Println("Callback time:", n)
})
}
输出结果:
Callback time: 1
Callback time: 2
Callback time: 3
Callback time: 4
Callback time: 5
Function Factory代码范例
package main
import "fmt"
// multiplierGenerator 返回一个闭包函数,用于生成乘法器函数。
// times 参数指定乘数。
func multiplierGenerator(times int) func(int) int {
// 返回一个闭包函数,该闭包函数将传入的参数与 times 相乘并返回结果。
return func(i int) int {
return i * times
}
}
func main() {
// 创建一个乘以2的乘法器函数
timesTwoFunction := multiplierGenerator(2)
// 创建一个乘以3的乘法器函数
timesThreeFunction := multiplierGenerator(3)
// 使用乘法器函数计算并输出结果
fmt.Println("result1:", timesTwoFunction(2)) // 输出:result1: 4
fmt.Println("result2:", timesThreeFunction(2)) // 输出:result2: 6
}
Facebook评论