Подтвердить что ты не робот

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

Мне нужно получить элемент из базы данных 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"`
}

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

4b9b3361

Ответ 1

В документации пакета reflect говорится:

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

Что вам нужно сделать, так это использовать пространство вместо запятой в качестве разделителя строки тега.

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

Ответ 2

Спасибо за принятый ответ.

Ниже приведены только для ленивых людей, подобных мне.

НЕПРАВИЛЬНО

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