2013-09-05 28 views
81

tôi cần để có được một mục từ một cơ sở dữ liệu Mongo, vì vậy tôi định nghĩa một cấu trúc như thế nàyLàm thế nào để xác định nhiều thẻ tên trong một cấu trúc

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

Bây giờ tôi cũng cần phải mã hóa nó để JSON, nhưng nó mã hóa các trường như chữ hoa (tôi nhận được PageId thay vì pageId) vì vậy tôi cũng cần xác định thẻ trường cho JSON. Tôi cố gắng một cái gì đó như thế này nhưng nó đã không làm việc:

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

Vậy làm thế nào điều này có thể được thực hiện, xác định nhiều thẻ tên trong một cấu trúc?

Trả lời

135

Nó nói trong tài liệu của gói reflect:

Theo quy ước, thẻ chuỗi là một nối của chính không gian tách ra tùy chọn: "giá trị" cặp. Mỗi khóa là một chuỗi không trống bao gồm các ký tự không điều khiển khác với dấu cách (U + 0020 ''), trích dẫn (U + 0022 '"') và dấu hai chấm (U + 003A ':'). sử dụng ký tự chữ U + 0022 '"' và chuỗi ký tự Go chuỗi.

Điều bạn cần làm là sử dụng dấu cách thay vì dấu phẩy làm dấu tách chuỗi thẻ.

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

Ngoài ra, hãy chắc chắn rằng nó được tách ra chỉ bởi một không gian, không phải bởi một tab. cf. https://stackoverflow.com/questions/20215510/cannot-retrieve-id-value-using-mgo-with-golang – GreenRaccoon23

+2

'go vet' không bắt được điều này. https://github.com/golang/go/issues/14466 – kevpie

42

Cảm ơn câu trả lời được chấp nhận.

Dưới đây chỉ dành cho những người lười biếng như tôi.

KHÔNG ĐÚNG

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

ĐÚNG

type Page struct { 
    PageId string     `bson:"pageId" json:"pageId"` 
    Meta map[string]interface{} `bson:"meta" json:"pageId"` 
} 
Các vấn đề liên quan