Проблема заключается в том, что вы вводите неверные аргументы --class
Вы также можете сделать это во время выполнения с , отражают , если вам нужно.
func (m *My) MarshalJSON() ([]byte, error) {
oldtype := reflect.TypeOf(*m)
fields := make([]reflect.StructField, oldtype.NumField())
for i := 0; i < oldtype.NumField(); i++ {
field := oldtype.Field(i)
if _, ok := field.Tag.Lookup("xml"); ok {
field.Tag = reflect.StructTag(strings.Replace(string(field.Tag), "xml", "json", 1))
}
fields[i] = field
}
newtype := reflect.StructOf(fields)
a := reflect.ValueOf(*m).Convert(newtype).Interface()
return json.Marshal(&a)
}
Если это не во время выполнения, а для статического изменения исходного кода, вы можете использовать fatih/gomodifytags
.
См. « Написание инструмента Go для анализа и изменения тегов Struct »
Теги полей структуры являются важной частью типов кодирования / декодирования, особенно при использовании таких пакетов, как кодирование / JSON.
BLOCKQUOTE>
Тем не менее, изменение тегов является повторяющимся, громоздким и открытым для человеческих ошибок.
Мы можем упростить изменение тегов с помощью автоматизированного инструмента, написанного исключительно для этой цели.