gpt4 book ai didi

go - 为什么追加覆盖子元素?

转载 作者:行者123 更新时间:2023-12-01 22:35:20 27 4
gpt4 key购买 nike

我创建了这个结构:

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}]

最佳答案

在光标上的每次迭代中,您都在重用与 & 相同的内存块。在预先声明的 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)
}

关于go - 为什么追加覆盖子元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58146202/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com