【问题标题】:How to fix: Golang "append" method pushing same elements to slice如何修复:Golang“追加”方法将相同的元素推送到切片
【发布时间】:2019-11-06 10:43:00
【问题描述】:

我正在尝试将 DB ( Mongo ) 中的数据映射到 go 中的切片,如果我返回简单的 []string,那么一切都可以正常工作,但如果我将类型更改为 []*models.Organization,该代码将返回相同元素的切片。

func (os *OrganizationService) GetAll() ([]*models.Organization, error) {
    var organizations []*models.Organization
    results := os.MongoClient.Collection("organizations").Find(bson.M{})
    organization := &models.Organization{}
    for results.Next(organization) {
        fmt.Println(organization)
        organizations = append(organizations, organization)
    }
    return organizations, nil
}


我希望输出 [{ Name: "someOrg", ID: "someId" },{ Name: "someOrg2", ID: "someID }, ... ] ,但实际输出是 [{ Name: "someOrg", ID: "someId" },{ Name: "someOrg", ID: "someId" }, ... ]

我正在使用bongo 包。

【问题讨论】:

  • 查看github.com/mongodb/mongo-go-driver#usage。您需要将上下文传递给 results.Next(ctx) 并调用 results.Decode(&organzation) 和 print/append。
  • 嗨,感谢您的回复,但这对我没有帮助,因为我正在使用 bongo 连接 mongoDB

标签: mongodb go


【解决方案1】:

应用程序在循环的每次迭代中附加相同的 organization 值。通过在循环内创建一个新值来修复。

func (os *OrganizationService) GetAll() ([]*models.Organization, error) {
    var organizations []*models.Organization
    results := os.MongoClient.Collection("organizations").Find(bson.M{})
    organization := &models.Organization{}
    for results.Next(organization) {
        fmt.Println(organization)
        organizations = append(organizations, organization)
        organization = &models.Organization{} // new value for next iteration
    }
    return organizations, nil
}

【讨论】:

    猜你喜欢
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2016-12-03
    • 2018-04-15
    • 1970-01-01
    • 2017-08-11
    • 2016-12-03
    相关资源
    最近更新 更多