MST

星途 面试题库

面试题:Go中闭包如何提升代码效率的场景举例

请举例说明在Go语言中,闭包在哪些实际场景下能够有效提升代码效率,并简要解释其原理。
42.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

场景一:缓存

  1. 示例代码
package main

import "fmt"

func cacheFunction() func(int) int {
    cache := make(map[int]int)
    return func(n int) int {
        if result, ok := cache[n]; ok {
            return result
        }
        result := n * n
        cache[n] = result
        return result
    }
}
  1. 原理:闭包中可以定义并维护一个局部变量(这里是 cache 映射),这个变量不会随着函数调用结束而销毁。每次函数调用时,先检查缓存中是否已有结果,有则直接返回,避免重复计算,从而提升效率。

场景二:延迟执行

  1. 示例代码
package main

import "fmt"

func delayedFunction() func() {
    data := "Hello, World!"
    return func() {
        fmt.Println(data)
    }
}
  1. 原理:闭包可以捕获并保存外部函数的变量环境(这里是 data 变量),即使外部函数执行完毕,闭包函数仍然可以访问这些变量。通过延迟执行闭包函数,可以在需要的时候使用捕获的变量,减少不必要的提前计算和资源占用,提升效率。