go - 为什么追加覆盖子元素?
问题描述
我创建了这个结构:
type Country struct {
Id interface{} `bson:"_id,omitempty"`
Languages []string `json:"languages"`
Country string `json:"country"`
Country_id int `json:"country_id"`
Capital string `json:"capital"`
Currency_name string `json:"currency_name"`
Currency_symbol string `json:"currency_symbol"`
Currency_code string `json:"currency_code"`
Iso string `json:"iso"`
}
然后从 Mongo 我得到我需要的所有数据。问题是当我尝试附加每个元素时,语言被覆盖。
这是附加:
func GetAllCountries() []models.Country {
options := options.Find() options.SetLimit(4)
cur, err := db.Collection(COLLCOUNTRIES).Find(context.Background(), bson.D{}, options)
if err != nil {
log.Fatal(err)
}
var elements []models.Country
var elem models.Country
// Get the next result from the cursor
for cur.Next(context.Background()) {
err := cur.Decode(&elem)
if err != nil {
log.Fatal(err)
}
elements = append(elements, elem)
}
if err := cur.Err(); err != nil {
log.Fatal(err)
}
cur.Close(context.Background())
return elements
}
结果是这样的:
-- 追加前的元素 --
{ObjectID("5d7f6b2b57d5104f58e53d2b") [ar-AE fa en hi ur] United Arab Emirates 290557 Abu Dhabi Dirham د.إ AED AE}
-- 追加前的元素 --
{ObjectID("5d7f6b2b57d5104f58e53d2c") [fa-AF ps uz-AF tk] Afghanistan 1149361 Kabul Afghani ؋ AFN AF}
-- 所有结果 --
[{ObjectID("5d7f6b2b57d5104f58e53d2b") [fa-AF ps uz-AF tk ur] United Arab Emirates 290557 Abu Dhabi Dirham د.إ AED AE} {ObjectID("5d7f6b2b57d5104f58e53d2c") [fa-AF ps uz-AF tk] Afghanistan 1149361 Kabul Afghani ؋ AFN AF}]
解决方案
在光标上的每次迭代中,您都在使用&
pre-declared 上的同一块内存elem
,基本上覆盖了在前一次迭代中解码的数据。相反,在循环内部,为数据库中的每条记录分配一个新元素。
例如:
var elements []models.Country
// Get the next result from the cursor
for cur.Next(context.Background()) {
var elem models.Country
if err := cur.Decode(&elem); err != nil {
log.Fatal(err)
}
elements = append(elements, elem)
}
推荐阅读
- firebase - 'GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h' 文件未找到在反应原生中添加 rnfirebase 时出错
- elasticsearch - 如何改进我的 GeoPoint ElasticSearch 索引以获得更好的响应时间?
- oracle-sqldeveloper - 将 2 个表与表 1 中的子字符串匹配以匹配表 2
- python - 我们如何在 Django 上表示 pandas.series 值?
- ios - 如何创建无限水平滚动视图?
- numpy - 如何在 seaborn 包函数的热图中操作 xticklabels 和 yticklabels?
- python - Python列表:IndexError:列表索引超出范围
- c# - 如何找到数组中的最低ID
- c# - 从真正的随机字节生成的新字节,仍然是真正的随机?
- excel - Excel-VBA-隐藏行中受保护的工作表