MST

星途 面试题库

面试题:Go函数闭包的复杂应用

实现一个Go函数,该函数返回一个闭包。闭包内部维护一个计数器,每次调用闭包时,计数器增加,并返回计数器的值。要求考虑在多协程环境下,闭包对计数器操作的线程安全性,使用合适的同步机制确保数据一致性。
46.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    "sync"
)

func counter() func() int {
    var count int
    var mu sync.Mutex

    return func() int {
        mu.Lock()
        count++
        defer mu.Unlock()
        return count
    }
}

你可以使用如下方式调用这个函数:

func main() {
    c := counter()
    var wg sync.WaitGroup
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            fmt.Println(c())
        }()
    }
    wg.Wait()
}