MST

星途 面试题库

面试题:Go中匿名函数如何与闭包协同实现数据封装

请编写一段Go代码,通过匿名函数与闭包的协同工作,实现一个简单的数据封装场景,比如一个计数器,外部只能通过特定的函数来增加计数值,而不能直接访问计数器变量。解释你代码中闭包和匿名函数各自的作用。
28.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import "fmt"

// Counter 返回一个包含增加计数器值的函数
func Counter() func() int {
    count := 0
    // 匿名函数,作为闭包
    return func() int {
       count++
       return count
    }
}

闭包的作用

闭包在这里起到了数据封装的作用。在 Counter 函数中定义的 count 变量,被匿名函数所捕获。由于匿名函数持有对 count 的引用,count 变量不会在 Counter 函数返回后被销毁。外部只能通过匿名函数来修改和获取 count 的值,而无法直接访问 count 变量,实现了数据的隐藏和封装。

匿名函数的作用

匿名函数提供了操作封装数据(即 count)的接口。它定义了如何增加计数器的值并返回结果。外部通过调用这个匿名函数来间接操作 count,保证了对 count 操作的一致性和安全性。

你可以通过以下方式调用上述代码:

func main() {
    c := Counter()
    fmt.Println(c()) // 输出: 1
    fmt.Println(c()) // 输出: 2
}