猿问

Go函数写入同一个地图

我正在尝试熟悉 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 中,地图是通过引用传递的。为什么打印一张空地图?


拉丁的传说
浏览 104回答 2
2回答

HUWWW

正如评论中指出的那样,您需要同步对地图的访问并且您的使用sync.WaitGroup不正确。试试这个:func main() {&nbsp; &nbsp; squares := make(map[int]int)&nbsp; &nbsp; var lock sync.Mutex&nbsp; &nbsp; var wg sync.WaitGroup&nbsp; &nbsp; for i := 1; i <= 10; i++ {&nbsp; &nbsp; &nbsp; &nbsp; wg.Add(1) // Increment the wait group count&nbsp; &nbsp; &nbsp; &nbsp; go func(n int, s map[int]int) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lock.Lock() // Lock the map&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s[n] = n * n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lock.Unlock()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wg.Done() // Decrement the wait group count&nbsp; &nbsp; &nbsp; &nbsp; }(i, squares)&nbsp; &nbsp; }&nbsp; &nbsp; wg.Wait()&nbsp; &nbsp; fmt.Println("Squares::: ", squares)}

慕虎7371278

sync.Map是您实际要查找的内容,在此处修改代码以适合您的用例,PS 必须添加一些睡眠,以便在调用所有 go 例程之前程序不会完成。
随时随地看视频慕课网APP

相关分类

Go
我要回答