Cómo definir varias etiquetas de nombre en una estructura


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 en JSON, pero codifica los campos en mayúsculas (obtengo PageId en lugar de pageId), por lo que también necesito definir etiquetas de campo para JSON. Probé 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?

Author: Tom Jowitt, 2013-09-05

2 answers

Dice en la documentación del paquete reflect:

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

Lo que debe hacer es usar espacio en lugar de coma como cadena de etiqueta separador.

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"pageId"`
}
 157
Author: ANisus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-13 09:03:41

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"`
}
 50
Author: Benny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-04 10:18:52