2013-09-05 32 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"` 
}