MST

星途 面试题库

面试题:Go中闭包的基本概念及简单实现

请解释Go语言中闭包的概念,并通过一段简单的代码示例展示如何创建和使用闭包,同时说明闭包捕获变量的方式。
48.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

闭包概念: 在Go语言中,闭包是一个函数值,它可以引用其函数体之外的变量。闭包允许将函数与其相关的环境(即该函数引用的变量)打包在一起,形成一个独立的实体。即使函数执行完毕,其引用的外部变量也不会被释放,只要闭包还存在,就可以继续访问和修改这些变量。

代码示例

package main

import "fmt"

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

使用闭包:

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

闭包捕获变量的方式: 在上述代码中,counter 函数返回的闭包 func() int 捕获了 counter 函数内定义的变量 i。闭包对变量的捕获是通过引用方式进行的。每次调用闭包 c 时,都会访问并修改同一个 i 变量,因为闭包记住了它被创建时的环境,包括对外部变量 i 的引用。所以每次调用 c()i 都会自增并返回新的值。