go 中高阶函数是接受或返回函数的函数,需显式声明函数类型;闭包捕获变量引用而非值,循环中易出错。
Go 本身不支持函数式编程范式,但可以用高阶函数、闭包和匿名函数模拟关键行为——前提是理解它们的边界:没有柯里化、无自动偏函数、不支持尾递归优化,且所有“函数值”本质是 func 类型变量。
什么是 Go 里的高阶函数?
高阶函数即接受函数作为参数或返回函数的函数。Go 中必须显式声明函数类型,不能像 JavaScript 那样直接传 function 字面量而不定义签名。
常见错误:把匿名函数直接传给未适配的参数,导致 cannot use ... as type func(...) in argument。
- 先定义函数类型别名更清晰,例如:
type Processor func(int) int - 参数中写
fn Processor,而非fn func(int) int(虽等价,但可读性差) - 返回函数时,必须显式写出完整签名:
func() string,不能省略括号
闭包捕获变量的真实生命周期
Go 闭包会捕获外部变量的引用,不是值拷贝——这点在循环中极易出错。