Как исправить: метод "append" Golang, толкающий те же элементы в срез - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь отобразить данные из БД (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 пакет.

1 Ответ

2 голосов
/ 24 июня 2019

Приложение добавляет одно и то же значение 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...