ホームページ  >  記事  >  バックエンド開発  >  Go マップを XML に変換する方法: カスタム マーシャラー アプローチ

Go マップを XML に変換する方法: カスタム マーシャラー アプローチ

Susan Sarandon
Susan Sarandonオリジナル
2024-10-31 08:47:30139ブラウズ

How to Convert Go Maps to XML: A Custom Marshaler Approach

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。