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 关注
- 133 浏览
添加回答
举报