Jak zdefiniować wiele tagów nazw w strukturze

137

Muszę pobrać element z bazy danych mongo, więc zdefiniowałem taką strukturę

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

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

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

Jak więc można to zrobić, zdefiniować wiele tagów nazw w strukturze?

Sofia
źródło

Odpowiedzi:

238

W dokumentacji reflectpakietu jest napisane :

Zgodnie z konwencją, ciągi znaczników są połączeniem opcjonalnie oddzielonych spacjami par klucz: „wartość”. Każdy klucz to niepusty ciąg składający się ze znaków niebędących kontrolkami innych niż spacja (U + 0020 ''), cudzysłów (U + 0022 '"') i dwukropek (U + 003A ':'). Każda wartość jest cytowana używając znaków U + 0022 '"' i składni literału Go.

To, co musisz zrobić, to użyć spacji zamiast przecinka jako separatora ciągu znaczników.

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"meta"`
}
ANisus
źródło
5
Upewnij się też, że jest oddzielony tylko spacją, a nie tabulatorem. por. stackoverflow.com/questions/20215510/…
GreenRaccoon
68

Dzięki za zaakceptowaną odpowiedź.

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

BŁĘDNY

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

POPRAWNY

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"pageId"`
}
Benny
źródło