34

HTTP 要求ヘッダーに応じて JSON または XML として出力できるアプリケーションがあります。使用している構造体に正しいタグを追加することで、どちらの場合も正しい出力を得ることができますが、JSON と XML の両方のタグを指定する方法がわかりません。

たとえば、これは正しい XML にシリアライズされます。

type Foo struct {
    Id          int64       `xml:"id,attr"`
    Version     int16       `xml:"version,attr"`
}

...そして、これは正しい JSON を生成します。

type Foo struct {
    Id          int64       `json:"id"`
    Version     int16       `json:"version"`
}

...しかし、これはどちらにも機能しません:

type Foo struct {
    Id          int64       `xml:"id,attr",json:"id"`
    Version     int16       `xml:"version,attr",json:"version"`
}
4

1 に答える 1

66

Go タグはスペースで区切られます。マニュアルから:

慣例により、タグ文字列は、オプションでスペースで区切られた key:"value" ペアの連結です。各キーは、スペース (U+0020 ' ')、引用符 (U+0022 '"')、およびコロン (U+003A ':') 以外の非制御文字で構成される空でない文字列です。各値は引用符で囲まれています。 U+0022 '"' 文字と Go 文字列リテラル構文を使用します。

したがって、書きたいことは次のとおりです。

type Foo struct {
    Id          int64       `xml:"id,attr" json:"id"`
    Version     int16       `xml:"version,attr" json:"version"`
}
于 2013-11-10T01:34:26.507 に答える