Преобразование метода в общий способ, поиск с помощью mgo

Я пытаюсь получить функцию getObj(), которая будет более общей и может работать с любым типом, а не только с пользователем, как в моем коде. Я думал взамен интерфейса вместо определенной структуры, но я не могу вписать эту идею в мой код, пожалуйста, кто-нибудь может мне помочь?
заранее спасибо

type User struct {
    FirstName  string        `bson:"first_name"`
    LastName   string        `bson:"last_name"`
}

type Mbase struct {
    coll *mgo.Collection
    sess *mgo.Session
}

func (b *Mbase) getObj(attr string, val string) (res *User, err error) {
    err = b.coll.Find(bson.M{attr: val}).One(&res)
    if err != nil {
        return
    }
    err = nil
    return
}

1 ответ

Решение

Вы можете сделать что-то вроде:

func (b *Mbase) GetObj(attr string, val string, result interface{}) error {
    return b.coll.Find(bson.M{attr: val}).One(result)
}

Не похоже, что помощник делает много хорошего, хотя. Find+One сам по себе уже является общим. Я также хотел бы рассмотреть возможность использования bson.D{{attr, val}}вместо bson.M, если это все, что вам нужно.

Кроме того, рассмотрите возможность задавать вопросы на одном форуме за раз.

Другие вопросы по тегам