Golang revel+mgo - данные не возвращаются, когда переменные структуры имеют имена в нижнем регистре

Это мой тип структуры

type Category struct {
    Name string     `bson:"listName"`
    Slug string     `bson:"slug"`
}

используется со следующей функцией для возврата всех результатов из коллекции монго:

func GetCategories(s *mgo.Session) []Category {
    var results []Category
    Collection(s).Find(bson.M{}).All(&results)
    return results
}

Проблема в том, что имена полей в моей базе данных начинаются с нижнего регистра, но структура Golang возвращает null, когда я пытаюсь использовать имена переменных, начинающиеся с нижнего регистра. Например, это возвращает JSON с пустыми соответствующими полями -

type Category struct {
    listName string `bson:"listName"`
    slug string     `bson:"slug"`
}

На самом деле я переношу API на основе Meteor на Golang, и многие продукты, которые в настоящее время используют API, полагаются на эти имена полей, как они есть в базе данных! Есть ли обходной путь?


person Gaurav Ojha    schedule 03.08.2016    source источник
comment
Также, пожалуйста, не игнорируйте ошибки. Collection(s).Find(bson.M{}).All(&results) должны проверять, чтобы возвращаемое значение (ошибка типа) было равно нулю. blog.golang.org/error-handling-and-go   -  person Ezequiel Moreno    schedule 03.08.2016


Ответы (1)


Вам нужно сделать свои поля видимыми для mgos bson Unmarshall, назвав их с помощью начальная заглавная буква. Вам также необходимо сопоставить соответствующие имена полей json/bson.

type Category struct {
    ListName string      `json:"listName" bson:"listName"`
    Slug string          `json:"slug"     bson:"slug"`
}
person Ezequiel Moreno    schedule 03.08.2016
comment
Структура категории типа This { ListName string bson:"listName" Slug string bson:"slug" } Возвращает это - { ListName: Триммер/Эпилятор, Slug: триммер }, Принимая во внимание, что this - структура категории типа { ListName string json:"listName" Slug string json:"slug" } Возвращает это - {listName: , slug: trimmer }, что на самом деле ближе к тому, что я хотел бы. Я хочу, чтобы имена полей были в json такими, какие они есть. - person Gaurav Ojha; 03.08.2016
comment
добавить bson:"listName" json:"listName" - person Ezequiel Moreno; 03.08.2016
comment
Пожалуйста, включите это в ответ, и я могу отметить это как правильное! Ты восхитителен! - person Gaurav Ojha; 03.08.2016