为了账号安全,请及时绑定邮箱和手机立即绑定

Go函数写入同一个地图

Go函数写入同一个地图

Go
拉丁的传说 2023-05-08 14:37:15
我正在尝试熟悉 go 例程。我编写了以下简单程序来将 1-10 的数字平方存储在地图中。func main() {    squares := make(map[int]int)    var wg sync.WaitGroup    for i := 1; i <= 10; i++ {        go func(n int, s map[int]int) {            s[n] = n * n        }(i, squares)    }    wg.Wait()    fmt.Println("Squares::: ", squares)}最后,它打印一张空地图。但是在 go 中,地图是通过引用传递的。为什么打印一张空地图?
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

正如评论中指出的那样,您需要同步对地图的访问并且您的使用sync.WaitGroup不正确。


试试这个:


func main() {

    squares := make(map[int]int)

    var lock sync.Mutex

    var wg sync.WaitGroup

    for i := 1; i <= 10; i++ {

        wg.Add(1) // Increment the wait group count

        go func(n int, s map[int]int) {

            lock.Lock() // Lock the map

            s[n] = n * n

            lock.Unlock()

            wg.Done() // Decrement the wait group count

        }(i, squares)

    }

    wg.Wait()

    fmt.Println("Squares::: ", squares)

}


查看完整回答
反对 回复 2023-05-08
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

sync.Map是您实际要查找的内容,在此处修改代码以适合您的用例,

PS 必须添加一些睡眠,以便在调用所有 go 例程之前程序不会完成。


查看完整回答
反对 回复 2023-05-08
  • 2 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信