2016-08-03 6 views
1

Это моя структура типаGolang Revel + MgO - никакие данные не возвращаются при Struct переменных, имеющих имена в нижнем регистре

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 
} 

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

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

Я на самом деле портирования API Метеор основанный на Golang и много продуктов в настоящее время с помощью API полагаются на эти имена полей, как они в БД! Есть ли обходной путь?

+0

Кроме того, пожалуйста, не игнорируйте ошибки. Коллекция (ы) .Find (bson.M {}). Все (& results) должны проверять, чтобы возвращаемое значение (ошибка типа) было равно нулю. https://blog.golang.org/error-handling-and-go –

+0

Да! Спасибо! –

ответ

1

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

type Category struct { 
    ListName string  `json:"listName" bson:"listName"` 
    Slug string   `json:"slug"  bson:"slug"` 
} 
+0

Это - тип Категория структура { \t ИМЯ_СПИСКА строка 'BSON: "ИМЯ_СПИСКА"' \t Slug строка 'BSON: "слизняк"' } Возвращает это - { "ИМЯ_СПИСКА": "триммер/Эпилятор", "Slug": "триммер" }, Принимая во внимание, это - типа Категория структуры { \t ИМЯ_СПИСКА строки 'JSON: "ИМЯ_СПИСОК"' \t Slug строки 'JSON: "слизняк"' } Возвращает это - {"listName": "", "slug": "trimmer" }, Это действительно ближе к тому, что я хочу. Я хочу, чтобы имена полей были в json так же, как и они. –

+0

добавить '' 'bson:" listName "json:" listName "' '' –

+0

Пожалуйста, включите это в ответ, и я могу отметить его как правильно! Ты восхитителен! –