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


137

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"`
}

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

回答:


238

これは、の文書で述べている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"`
}

5
また、タブではなくスペースで区切ってください。cf. stackoverflow.com/questions/20215510/...
GreenRaccoon23

68

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

以下は私のような怠惰な人々のためのものです。

不正確

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

正しい

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"pageId"`
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.