web-dev-qa-db-ja.com

構造体で複数の名前タグを定義する方法

Mongoデータベースからアイテムを取得する必要があるため、このような構造体を定義しました

type Page struct {
    PageId string                 `bson:"pageId"`
    Meta   map[string]interface{} `bson:"meta"`
}

また、JSONにエンコードする必要がありますが、フィールドを大文字にエンコードするため(pageIdではなくPageIdを取得します)、JSONのフィールドタグも定義する必要があります。私はこのようなことを試みましたが、うまくいきませんでした:

type Page struct {
    PageId string                 `bson:"pageId",json:"pageId"`
    Meta   map[string]interface{} `bson:"meta",json:"pageId"`
}

それでは、どのようにこれを行うことができますか、構造体に複数の名前タグを定義しますか?

113
Sofia

reflectパッケージのドキュメントには次のように記載されています。

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

あなたがする必要があるのは、タグ文字列セパレータとしてコンマの代わりにスペースを使用することです。

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"meta"`
}
198
ANisus

受け入れられた答えをありがとう。

以下は私のような怠け者向けです。

[〜#〜] incorrect [〜#〜]

type Page struct {
    PageId string                 `bson:"pageId",json:"pageId"`
    Meta   map[string]interface{} `bson:"meta",json:"pageId"`
}

[〜#〜] correct [〜#〜]

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"pageId"`
}
56
Benny