Cómo definir múltiples etiquetas de nombre en una estructura

137

Necesito obtener un elemento de una base de datos mongo, así que definí una estructura como esta

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

Ahora también necesito codificarlo a JSON, pero codifica los campos como mayúsculas (obtengo PageId en lugar de pageId), así que también necesito definir etiquetas de campo para JSON. Intenté algo como esto pero no funcionó:

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

Entonces, ¿cómo se puede hacer esto, definir múltiples etiquetas de nombre en una estructura?

Sofía
fuente

Respuestas:

239

Dice en la documentación del reflectpaquete:

Por convención, las cadenas de etiquetas son una concatenación de claves opcionalmente separadas por espacios: pares de "valores". Cada clave es una cadena no vacía que consta de caracteres que no son de control distintos del espacio (U + 0020 ''), comillas (U + 0022 '"') y dos puntos (U + 003A ':'). Cada valor se cita usando los caracteres U "0022 '"' y la sintaxis literal de la cadena Go.

Lo que debe hacer es usar el espacio en lugar de la coma como separador de cadenas de etiquetas.

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"meta"`
}
ANisus
fuente
55
Además, asegúrese de que esté separado solo por un espacio, no por una pestaña. cf. stackoverflow.com/questions/20215510/…
GreenRaccoon23
68

Gracias por la respuesta aceptada.

A continuación es solo para la gente perezosa como yo.

INCORRECTO

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

CORRECTO

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