MST

星途 面试题库

面试题:Go中闭包如何实现数据封装

在Go语言中,解释闭包是怎样实现数据封装的,通过一个简单的示例代码说明,比如创建一个函数,该函数返回的闭包能够访问并修改其外部函数的局部变量,但外部其他代码无法直接访问这个局部变量。
36.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

闭包在Go语言中通过将函数与其相关的环境(即该函数所引用的变量)组合在一起,实现数据封装。外部代码无法直接访问闭包内捕获的外部函数局部变量,但闭包函数自身可以访问和修改这些变量。

示例代码如下:

package main

import "fmt"

// 外部函数
func counter() func() int {
    count := 0 // 外部函数的局部变量,被闭包捕获
    return func() int {
        count++
        return count
    }
}

你可以这样使用这个闭包:

func main() {
    c := counter() // c 是一个闭包函数
    fmt.Println(c()) // 输出 1
    fmt.Println(c()) // 输出 2
}

在上述代码中,counter 函数返回一个闭包。这个闭包函数可以访问和修改 counter 函数中的局部变量 count,但外部代码无法直接访问 count,从而实现了数据封装。每次调用闭包 c 时,都会修改并返回 count 的值。