Ответ 1
tl; dr: Использовать ,omitempty
, и если вам нужно беспокоиться о разнице между нулевым значением и значением null/not defined, выполните то, что делает API GitHub, и используйте указатель.
И json
и bson
поддерживают тег ,omitempty
. Для json "пустые значения: false, 0, любое значение nil или значение интерфейса, а также любой массив, срез, карта или строка нулевой длины" (json docs). Для bson, ,omitempty
означает " ,omitempty
только поле, если оно не задано нулевым значением для типа или пустым срезам или картам", а нулевые значения включают пустые строки и указатели nil (bson docs).
Поэтому, если вам действительно нужна структура Group, вы можете поместить *Group
вместо, и она не будет сохранена, когда указатель равен нулю. Если для Investment
требуется только имя группы, это еще проще: ""
поскольку имя группы хранит ключ группы.
bson
умолчанию использует более bson
имя поля, поэтому вы можете опустить это из тега struct, когда они совпадают. json
умолчанию использует имя "Заглавное", поэтому укажите нижнее имя в теге, если вам нужен строчный регистр.
Итак, лучший случай, возможно, вы можете просто использовать:
type Investment struct {
Base
Symbol string 'json:"symbol" binding:"required"'
Group string 'json:"group,omitempty" bson:",omitempty"'
Fields bson.M 'json:"fields"'
}
Если вы когда-либо запускаете поля, где нулевое значение для типа ("", 0, false и т.д.) Отличается от "не указано", вы можете делать то, что делает API GitHub, и накладывать указатели на ваши структуры --essentially расширение трюка *Group
.