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?

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"`
}

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"`
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.