Marshall Go 對應到 XML
將 Go 映射轉換為 JSON 非常簡單。但是,嘗試對XML 執行相同的操作可能會導致錯誤:
xml: unsupported type: map[string]int
解決方案:使用自訂XML 封送拆收器
與JSON 不同,XML 編組本身並不支援映射。要解決此限制,可以為您的地圖類型實作自訂xml.Marshaler:
<code class="go">// StringMap is a map[string]string. type StringMap map[string]string // StringMap marshals into XML. func (s StringMap) MarshalXML(e *xml.Encoder, start xml.StartElement) error { tokens := []xml.Token{start} for key, value := range s { t := xml.StartElement{Name: xml.Name{"", key}} tokens = append(tokens, t, xml.CharData(value), xml.EndElement{t.Name}) } tokens = append(tokens, xml.EndElement{start.Name}) for _, t := range tokens { err := e.EncodeToken(t) if err != nil { return err } } // flush to ensure tokens are written return e.Flush() }</code>
現在,您只需呼叫xml.MarshalIndent(...) 將地圖編組為XML:
<code class="go">output, err := xml.MarshalIndent(data, "", " ")</code>
以上是如何將 Go 映射轉換為 XML:自訂封送拆收器方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!