MST

星途 面试题库

面试题:Go语言中闭包在函数式编程的基础应用

请编写一段Go语言代码,利用闭包实现一个简单的计数器功能。要求这个计数器能够在每次调用时返回递增后的数值。解释你代码中闭包的工作原理,以及闭包如何在这个函数式编程场景中起到作用。
21.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import "fmt"

// NewCounter 创建并返回一个计数器函数
func NewCounter() func() int {
    count := 0
    return func() int {
        count++
        return count
    }
}

在上述代码中,NewCounter 函数返回了一个匿名函数。这里闭包的工作原理是:匿名函数捕获并持有了 NewCounter 函数中的局部变量 count。即使 NewCounter 函数已经返回,这个局部变量 count 也不会被销毁,因为匿名函数仍然引用它。

在函数式编程场景中,闭包起到了关键作用。它允许我们创建具有内部状态的函数,就像这里的计数器,每次调用返回递增后的数值。这个内部状态(count)被封装在闭包中,外部代码无法直接访问和修改,只能通过闭包返回的函数进行操作,从而实现了数据的隐藏和封装,这是函数式编程和面向对象编程都很重视的特性。

func main() {
    counter := NewCounter()
    fmt.Println(counter())
    fmt.Println(counter())
    fmt.Println(counter())
}

main 函数中,我们创建了一个计数器实例 counter,每次调用 counter 函数,都会使 count 变量递增并返回新的值。