Golang 中如何实现函数式编程?

Golang 中支持函数式编程,主要通过高阶函数(函数作为参数或返回值)和闭包实现。

高阶函数例子:

// 函数作为参数 
func add(x, y int) int {
    return x + y
}

func do(f func(int, int) int, a, b int) int {
    return f(a, b)
}

func main() {
    sum := do(add, 1, 2)  // sum = 3
    println(sum)
}

闭包例子:

func makeAdder(x int) func(int) int {
    return func(y int) int {
        return x + y
    }
}

func main() {
    add5 := makeAdder(5)    // 返回一个闭包
    sum := add5(10)         // sum = 15
    println(sum)
}

makeAdder 返回一个闭包,该闭包可以访问并记住其封闭作用域(enclosing scope)中的变量 x。
每次调用 add5 都会使用封闭变量 x,所以该闭包可以作为一个函数达到累加的效果。

除此之外,Golang 还支持匿名函数和内置的高阶函数,都有助于函数式编程,例如:

  • 匿名函数:
func(func(x int) int) {
    return x + 1 
}
  • 内置的高阶函数:
    1) len、cap、append: 对 slice 进行操作
    2) make: 创建 slice、map 和 channel
    3) delete: 从 map 中删除元素
    4) panic 和 recover: 用于异常处理

所以 Golang 对函数式编程的支持主要体现在:

  • 高阶函数:函数可以作为参数或返回值
  • 闭包:函数可以访问并引用其封闭作用域的变量
  • 内置的高阶函数和匿名函数
  • 能轻松实现高阶函数的语法:省略类型申明、多值返回等
    Golang 的这些特性使得函数式编程成为可能,我们可以通过这些手段来提高代码的抽象程度和重用性。