2013-09-05 54 views
81

我需要从蒙戈数据库项目定义多个名称标签,所以我这样定义如何在结构

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

一个struct现在我还需要将其编码为JSON,但它编码字段为大写(我得到PageId而不是pageId),所以我还需要为JSON定义字段标记。我尝试过这样但它没有工作:

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

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

回答

135

它说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:"pageId"` 
} 
+2

此外,还要确保它仅由一个空格不是由制表符分隔。比照https://stackoverflow.com/questions/20215510/cannot-retrieve-id-value-using-mgo-with-golang – GreenRaccoon23

+2

'去兽医'不理解这一点。 https://github.com/golang/go/issues/14466 – kevpie

42

感谢您接受的答案。

下面是只为像我这样的懒惰的人。

不正确

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