MST

星途 面试题库

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

请解释在Go语言里,闭包是怎样实现数据封装的,并且通过编写一段简单代码示例来展示这种数据封装的效果。
16.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

闭包实现数据封装原理

在Go语言中,闭包是一个函数值,它引用了其函数体之外的变量。通过闭包,这些外部变量可以被捕获并与闭包函数绑定在一起,形成一个独立的环境。由于外部无法直接访问闭包捕获的变量,只能通过闭包提供的函数接口来间接操作这些变量,从而实现了数据封装。

代码示例

package main

import "fmt"

// 定义一个函数,返回一个闭包
func counter() func() int {
    count := 0
    return func() int {
        count++
        return count
    }
}

func main() {
    // 获取闭包实例
    c := counter()

    // 通过闭包函数操作被封装的数据
    fmt.Println(c()) 
    fmt.Println(c()) 
    fmt.Println(c()) 
}

在上述代码中,counter 函数返回一个闭包。在 counter 函数内部定义的 count 变量,被闭包捕获。外部代码无法直接访问 count,只能通过调用闭包函数来增加并获取 count 的值,这就实现了对 count 变量的数据封装。