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 中国語 Web サイトの他の関連記事を参照してください。