So definieren Sie mehrere Namensschilder in einer Struktur


137

Ich muss ein Element aus einer Mongo-Datenbank abrufen, also habe ich eine Struktur wie diese definiert

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

Jetzt muss ich es auch in JSON codieren, aber es codiert die Felder in Großbuchstaben (ich erhalte PageId anstelle von pageId), sodass ich auch Feld-Tags für JSON definieren muss. Ich habe so etwas versucht, aber es hat nicht funktioniert:

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

Wie kann dies getan werden, indem mehrere Namensschilder in einer Struktur definiert werden?

Antworten:


238

In der Dokumentation des reflectPakets heißt es:

Konventionell sind Tag-Strings eine Verkettung von optional durch Leerzeichen getrennten Schlüssel: "Wert" -Paaren. Jeder Schlüssel ist eine nicht leere Zeichenfolge, die aus anderen Nichtsteuerzeichen als Leerzeichen (U + 0020 ''), Anführungszeichen (U + 0022 '"') und Doppelpunkt (U + 003A ':') besteht. Jeder Wert wird in Anführungszeichen gesetzt Verwenden von U + 0022 '"' Zeichen und Go-String-Literal-Syntax.

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

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

5
Stellen Sie außerdem sicher, dass es nur durch ein Leerzeichen und nicht durch eine Registerkarte getrennt ist. vgl. stackoverflow.com/questions/20215510/…
GreenRaccoon23

68

Danke für die akzeptierte 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"`
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.