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])
}
一個顯而易見的效果演示就在那里——觀察到第一個循環的迭代修改了相同的變量,而在第二個循環中,每個迭代首先獲得一個新的變量實例。

TA貢獻1788條經驗 獲得超4個贊
manyUsers 的類型是 value 而不是 reference,所以下面的代碼可能沒問題
var manyUsers *zendesk.ManyUsers
users := make(map[string]*zendesk.ManyUsers)
......

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]. 因此,我從不匯總迭代中的數據,并且每個國家/地區都獲得了正確數量的用戶。
謝謝你。
- 3 回答
- 0 關注
- 156 瀏覽
添加回答
舉報