2013-09-05 7 views
81

ho bisogno di ottenere un elemento da un database di Mongo, così ho definito una struttura come questoCome definire più tag nome in una struct

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

Ora ho anche bisogno di codificare a JSON, ma codifica i campi sono in maiuscolo (ottengo PageId invece di pageId) quindi devo anche definire i tag di campo per JSON. Ho provato qualcosa di simile, ma non ha funzionato:

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

Così come può questo essere fatto, definire più etichette nome in una struttura?

risposta

135

Si dice nella documentazione del pacchetto reflect:

Per convenzione, stringhe tag sono una concatenazione di facoltativamente chiave separata da spazi: "valore" coppie. Ogni chiave è una stringa non vuota composta da caratteri non di controllo diversi dallo spazio (U + 0020 ''), citazione (U + 0022 '"') e due punti (U + 003A ':'). Ogni valore è quotato usando U + 0022 caratteri "" "e sintassi Go letterale stringa.

Quello che devi fare è usare lo spazio al posto della virgola come separatore di stringhe di tag.

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

Inoltre, assicurarsi che è separato da uno spazio, non da una linguetta. cf. https://stackoverflow.com/questions/20215510/cannot-retrieve-id-value-using-mgo-with-golang – GreenRaccoon23

+2

'go vet' non cattura questo. https://github.com/golang/go/issues/14466 – kevpie

42

Grazie per la risposta accettata.

Di seguito è solo per le persone pigre come me.

INCORRECT

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

CORRETTO

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