MST

星途 面试题库

面试题:Go语言中闭包的基本概念及应用场景

请简要阐述Go语言闭包的概念,并举例说明至少两个闭包在实际编程中的应用场景。
40.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

Go语言闭包概念

闭包是一个函数值,它可以引用其函数体外部的变量。在Go语言中,当一个函数在另一个函数内部定义,并且内部函数可以访问外部函数的变量时,就形成了闭包。闭包使得这些变量的生命周期得以延长,即使外部函数已经返回,内部函数依然可以访问和修改这些变量。

应用场景

  1. 计数器
package main

import "fmt"

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

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

在这个例子中,counter函数返回一个闭包。每次调用这个闭包,它都会增加并返回i的值。这里i的生命周期因为闭包而延长,不会随着counter函数返回而销毁。

  1. 延迟计算
package main

import "fmt"

func calculate(a, b int) func() int {
    sum := a + b
    return func() int {
        return sum
    }
}

func main() {
    result := calculate(3, 5)
    // 这里可以在需要的时候才计算结果
    fmt.Println(result())
}

calculate函数返回一个闭包,这个闭包可以在需要的时候计算并返回ab的和。通过这种方式,可以实现延迟计算,只有在调用闭包时才会真正获取结果。