首页 > 解决方案 > 如何修复:Golang“追加”方法将相同的元素推送到切片

问题描述

我正在尝试将 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包。

标签: mongodbgo

解决方案


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
}

推荐阅读