MST

星途 面试题库

面试题:Go中闭包的基础应用

请编写一个Go函数,该函数返回一个闭包,闭包每次调用时返回一个递增的整数。解释你代码中闭包是如何工作的,以及闭包捕获的变量的生命周期。
46.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import "fmt"

func counter() func() int {
    i := 0
    return func() int {
        i++
        return i
    }
}

闭包在这里是一个匿名函数,它捕获并引用了外层函数counter中的变量i。每次调用闭包时,它操作的都是同一个i变量。

闭包捕获的变量i的生命周期:i变量是在counter函数被调用时创建的,由于闭包持有对i的引用,即使counter函数返回后,i也不会被销毁,只有当闭包不再被引用(比如闭包被垃圾回收时),i才会被销毁。 例如:

func main() {
    c := counter()
    fmt.Println(c()) 
    fmt.Println(c()) 
}

上述代码在main函数中调用counter函数得到闭包c,两次调用闭包c时,i的值依次递增并返回。