Як визначити кілька тегів імен у структурі


137

Мені потрібно отримати елемент із бази даних mongo, тому я визначив структуру на зразок цієї

type Page struct {
    PageId string                 `bson:"pageId"`
    Meta   map[string]interface{} `bson:"meta"`
}

Тепер мені також потрібно кодувати його до JSON, але він кодує поля як великі регістри (я отримую PageId замість pageId), тому мені також потрібно визначити теги поля для JSON. Я спробував щось подібне, але не вийшло:

type Page struct {
    PageId string                 `bson:"pageId",json:"pageId"`
    Meta   map[string]interface{} `bson:"meta",json:"pageId"`
}

То як це можна зробити, визначити кілька тегів імен у структурі?

Відповіді:


238

У документації до reflectупаковки сказано :

За умовою, рядки тегів є об'єднанням необов'язково розділених пробілами ключів: "значення" пар. Кожен ключ - це не порожній рядок, що складається з символів, що не мають контролю, крім пробілу (U + 0020 ''), лапки (U + 0022 '"') і двокрапки (U + 003A ':'). Кожне значення цитується використовуючи символи U + 0022 '"' та синтаксис прямого рядка Go.

Що вам потрібно зробити, це використовувати простір замість коми як роздільник рядків тегів.

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"meta"`
}

5
Також переконайтеся, що він відокремлений лише пробілом, а не вкладкою. пор. stackoverflow.com/questions/20215510 / ...
GreenRaccoon23

68

Дякуємо за прийняту відповідь.

Нижче лише для ледачих людей, як я.

НЕПРАВНІ

type Page struct {
    PageId string                 `bson:"pageId",json:"pageId"`
    Meta   map[string]interface{} `bson:"meta",json:"pageId"`
}

ПРАВИЛЬНО

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"pageId"`
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.