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
}

Loading

Facebook评论