Как определить несколько тегов имен в структуре


137

Мне нужно получить элемент из базы данных Монго, поэтому я определил структуру, как это

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"`
}

Итак, как это можно сделать, определить несколько тегов имен в структуре?

Ответы:


239

В документации 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.