2 回答

TA貢獻(xiàn)1777條經(jīng)驗 獲得超3個贊
如果這不是在運(yùn)行時,而是靜態(tài)地修改您的代碼源,您可以使用fatih/gomodifytags
.
請參閱“編寫 Go 工具來解析和修改結(jié)構(gòu)標(biāo)記”
結(jié)構(gòu)字段標(biāo)簽是編碼/解碼類型的重要組成部分,尤其是在使用 encoding/json 等包時。
然而,修改標(biāo)簽是重復(fù)的、麻煩的并且容易出現(xiàn)人為錯誤。
我們可以使用專為此目的編寫的自動化工具輕松修改標(biāo)簽。

TA貢獻(xiàn)1831條經(jīng)驗 獲得超10個贊
如果需要,您也可以在運(yùn)行時使用反射來完成。
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)
}
- 2 回答
- 0 關(guān)注
- 168 瀏覽
添加回答
舉報