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

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

在循環中向地圖添加條目

在循環中向地圖添加條目

Go
慕森王 2022-01-10 11:02:41
我正在嘗試在我的應用程序中實現一種將每個國家/地區的用戶分開的方法,然后將它們發送到不同的操作。這就是我現在所擁有的:var manyUsers zendesk.ManyUsersusers := make(map[string]zendesk.ManyUsers)for {    ...    manyUsers.AppendUsers(mysqlRequest(country, id))    users[country] = manyUsers    fmt.Printf("[%s]: %#v\n\n", country, users[country])}但我發現當我添加 3 個不同的國家后,它會生成 3 個不同的密鑰,但最后一個將有來自其他國家的 3 個用戶。這是我的 AppendUsers 功能func (users *ManyUsers) AppendUsers(user User) []User {    users.Users = append(users.Users, user)    return users.Users}
查看完整描述

3 回答

?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

您基本上在循環的每次迭代中修改相同的變量manyUsers,for并在每次創建新映射條目時使用該單個實例作為值。


您沒有向我們展示您zendesk.ManyUser的定義方式,但如果它具有引用語義,您的所有地圖條目都將共享相同的數據。


我的猜測(鑒于不完整的問題陳述)是您需要zendesk.ManyUser在循環的每次迭代中創建一個新實例:


users := make(map[string]zendesk.ManyUsers)


for {

    ...

    var manyUsers zendesk.ManyUsers

    manyUsers.AppendUsers(mysqlRequest(country, id))

    users[country] = manyUsers


    fmt.Printf("[%s]: %#v\n\n", country, users[country])

}

一個顯而易見的效果演示就在那里——觀察到第一個循環的迭代修改了相同的變量,而在第二個循環中,每個迭代首先獲得一個新的變量實例。


查看完整回答
反對 回復 2022-01-10
?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

manyUsers 的類型是 value 而不是 reference,所以下面的代碼可能沒問題


var manyUsers *zendesk.ManyUsers

users := make(map[string]*zendesk.ManyUsers)

......


查看完整回答
反對 回復 2022-01-10
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊


我弄清楚我需要做什么,我使用了@kostix 的建議,所以我在for循環的每次迭代中創建,var manyUsers zendesk.ManyUsers但我還添加了以下內容:


manyUsers = users[country]

manyUsers.AppendUsers(mysqlRequest(country, id))

users[country] = manyUsers

將每個國家/地區的當前值傳遞給我的manyUsers我能夠User在ManyUsers結構中添加一個新元素并將附加值返回給users[country]. 因此,我從不匯總迭代中的數據,并且每個國家/地區都獲得了正確數量的用戶。


謝謝你。


查看完整回答
反對 回復 2022-01-10
  • 3 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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