亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號