MST

星途 面试题库

面试题:Go中闭包如何解决简单数据共享问题

请举例说明在Go语言中,如何利用闭包来实现两个函数之间的数据共享,假设共享的数据是一个整数变量,并解释闭包在其中起到的作用。
29.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import "fmt"

// 定义一个函数,返回一个闭包
func dataSharing() (func(int), func() int) {
    // 定义共享的整数变量
    sharedData := 0

    // 第一个闭包函数,用于设置共享数据
    setData := func(newValue int) {
        sharedData = newValue
    }

    // 第二个闭包函数,用于获取共享数据
    getData := func() int {
        return sharedData
    }

    return setData, getData
}

你可以这样使用:

func main() {
    set, get := dataSharing()
    set(10)
    fmt.Println(get()) // 输出: 10
}

闭包在其中起到的作用:

  1. 数据封装sharedData 变量被封装在 dataSharing 函数内部,外部无法直接访问,只有通过返回的闭包函数 setDatagetData 才能操作这个变量,提高了数据的安全性和封装性。
  2. 数据共享:不同的闭包函数 setDatagetData 可以访问和修改同一个 sharedData 变量,实现了函数间的数据共享。同时,由于闭包会捕获并保存其定义时的环境,即使 dataSharing 函数执行结束,sharedData 变量依然存在,保证了数据的持续性。