2013-09-05 15 views
81

Potrzebuję uzyskać element z bazy danych Mongo, więc zdefiniowany struct jak tenJak zdefiniować wiele plakietek w struct

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

Teraz też trzeba zakodować go do JSON, ale koduje pola jako wielkie litery (otrzymuję PageId zamiast pageId), więc muszę również zdefiniować znaczniki pól dla JSON. Próbowałem czegoś takiego, ale to nie działało:

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

Jak to zrobić, zdefiniuj wiele tagów w strukturze?

Odpowiedz

135

Mówi w dokumentacji pakietu reflect:

Umownie, struny tag są połączeniem ewentualnie przestrzeni oddzielonych klucz: „wartość” par. Każdy klucz jest niepustym łańcuchem składającym się ze znaków niekontrolowanych innych niż spacja (U + 0020 ''), cudzysłowy (U + 0022 '"') i dwukropka (U + 003A ':'). za pomocą znaków U + 0022 "" i literał łańcuchowy Go string.

Należy użyć spacji zamiast przecinka jako separatora łańcucha znaków.

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

Ponadto, upewnij się, że jest tylko oddzielone spacją, a nie przez kartę. cf. https://stackoverflow.com/questions/20215510/cannot-retrieve-id-value-using-mgo-with-golang – GreenRaccoon23

+2

'go vet' nie łapie tego. https://github.com/golang/go/issues/14466 – kevpie

42

Dzięki za zaakceptowaną odpowiedź.

Poniżej jest tylko dla leniwych ludzi takich jak ja.

INCORRECT

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

POPRAWNIE

type Page struct { 
    PageId string     `bson:"pageId" json:"pageId"` 
    Meta map[string]interface{} `bson:"meta" json:"pageId"` 
} 
Powiązane problemy