1. ホーム
  2. json

[解決済み] 構造体に複数のネームタグを定義する方法

2022-04-21 18:28:21

質問

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

では、構造体の中に複数のnameタグを定義するにはどうすればよいのでしょうか。

解決方法は?

それは のドキュメントでは reflect パッケージ :

慣習上、タグの文字列はスペースで区切られたキーと値のペアを連結したものです。各キーは、スペース(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"`
}