2013-09-05 4 views
81

Ich muss definieren ein Element aus einer Mongo Datenbank erhalten, so definiert ich eine Struktur wie dieseWie mehrere Namensschilder in einer Struktur

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

Nun, ich muss es auch zu JSON kodieren aber es kodiert die Felder als Großbuchstaben (ich bekomme PageId anstelle von pageId), also muss ich auch Feldtags für JSON definieren. Ich habe versucht, so etwas wie dieses, aber es hat nicht funktioniert:

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

So, wie dies getan werden kann, definieren mehrere Namensschilder in einer Struktur?

Antwort

135

Es heißt in der Dokumentation des reflect Paket:

Vereinbarungs Tag-Strings sind eine Verkettung von gegebenenfalls durch Leerzeichen getrennte Schlüssel: „Wert“ Paare. Jeder Schlüssel ist eine nicht leere Zeichenkette, die aus anderen Zeichen besteht als Leerzeichen (U + 0020 ''), Zitat (U + 0022 '' ') und Doppelpunkt (U + 003A': '). Jeder Wert wird in Anführungszeichen gesetzt Verwenden von U + 0022 '"' Zeichen und Go-String-Literalsyntax.

Was Sie tun müssen, ist die Verwendung von Leerzeichen anstelle von Komma als Tag String-Trennzeichen.

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

Stellen Sie außerdem sicher, dass es nur durch ein Leerzeichen getrennt wird, nicht durch eine Lasche. vgl. https://stackoverflow.com/questions/20215510/cannot-retrieve-id-value-using-mgo-with-golang – GreenRaccoon23

+2

'go vet' fängt das nicht. https://github.com/golang/go/issues/14466 – kevpie

42

Danke für die angenommene Antwort.

Unten ist nur für die faulen Leute wie mich.

FALSCH

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

RICHTIG

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