Come definire più etichette nome in una struttura


137

Ho bisogno di ottenere un oggetto da un database mongo, quindi ho definito una struttura come questa

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

Ora ho anche bisogno di codificarlo su JSON, ma codifica i campi come maiuscoli (ottengo PageId invece di pageId), quindi devo anche definire i tag di campo per JSON. Ho provato qualcosa del genere ma non ha funzionato:

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

Quindi, come può essere fatto, definire più tag in una struttura?

Risposte:


239

Dice nella documentazione del reflectpacchetto:

Per convenzione, le stringhe di tag sono una concatenazione di chiavi facoltativamente separate dallo spazio: coppie "valore". Ogni chiave è una stringa non vuota costituita da caratteri non di controllo diversi dallo spazio (U + 0020 ''), virgoletta (U + 0022 '"') e due punti (U + 003A ':'). Ogni valore viene citato usando i caratteri "+" U + 0022 e la sintassi letterale della stringa Go.

Quello che devi fare è utilizzare lo spazio anziché la virgola come separatore di stringhe di tag.

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

5
Inoltre, assicurati che sia separato solo da uno spazio, non da una scheda. cf. stackoverflow.com/questions/20215510/...
GreenRaccoon23

68

Grazie per la risposta accettata

Di seguito è solo per le persone pigre come me.

NON CORRETTO

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

CORRETTA

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"pageId"`
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.