如何在结构中定义多个名称标签

Posted

技术标签:

【中文标题】如何在结构中定义多个名称标签【英文标题】:How to define multiple name tags in a struct 【发布时间】:2013-09-09 05:58:50 【问题描述】:

我需要从 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"`

那么如何做到这一点,在一个结构体中定义多个名称标签呢?

【问题讨论】:

【参考方案1】:

上面写着in the documentation of the reflect package:

按照惯例,标签字符串是可选用空格分隔的键:“值”对的串联。每个键都是一个非空字符串,由除空格 (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"`

【讨论】:

另外,请确保它仅由空格分隔,而不是由制表符分隔。参看。 ***.com/questions/20215510/…【参考方案2】:

感谢您接受的答案。

以下内容仅供像我这样的懒人使用。

不正确

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

【讨论】:

以上是关于如何在结构中定义多个名称标签的主要内容,如果未能解决你的问题,请参考以下文章

从多个指标(相同的标签集,不同的名称)绘制 rate() 时如何避免“向量不能包含具有相同标签集的指标”错误

如何在swift ios中的自定义TableView单元格中显示多个字符串值到多个标签?

使用 purrr 时如何自定义 ggplot2 facet_grid 标签中的文本?

如何在 Grafana 表中显示多个 Prometheus 服务器名称?

如何将多个键值条目的 JSON 对象反序列化为 Rust 中的自定义结构

如何忽略未知标签的验证?