MST

星途 面试题库

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

请解释Go语言中闭包的概念,并通过一个简单的代码示例展示闭包的使用,说明闭包在这个示例中所起到的作用。
22.3万 热度难度
编程语言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()) 
    fmt.Println(c()) 
    fmt.Println(c()) 
}

闭包作用

  1. 状态保持:在上述示例中,counter函数返回的匿名函数引用了counter函数内部的变量i。每次调用返回的匿名函数时,i的值都会增加并保留上次调用后的状态。例如,多次调用c()i会依次递增,体现了闭包对变量i状态的保持。
  2. 数据封装:外部代码只能通过返回的匿名函数来间接访问和修改i,而不能直接访问counter函数内部的i变量,实现了一定程度的数据封装。