Lecciones del módulo (4/5)
Tags de campos y JSON
etiquetas en los campos de estructura son cadenas de metadatos, leídas mediante reflexión
de bibliotecas como encoding/json, encoding/xml, validador, ORM. si
escriben entre comilla invertida (cadena sin formato) inmediatamente después del tipo de campo.
Sintaxis
type User struct {
Name string `json:"nome"`
Age int `json:"eta,omitempty"`
}Convención de formato: chiave:"valore" separados por espacios (NO
comas) para múltiples claves:
type User struct {
Email string `json:"email" validate:"required,email"`
}etiquetas json: opciones
La opción más común es json, utilizada por encoding/json:
| Etiquetas | Efecto |
|---|---|
json:"nome" | Cambie el nombre del campo a nome en la salida JSON |
json:"nome,omitempty" | Omite el campo si tiene valor cero |
json:"-" | No serializar/deserializar este campo |
json:",omitempty" | Mantiene el nombre del campo Ir pero con omitempty |
type User struct {
Name string `json:"nome"`
Age int `json:"eta,omitempty"`
Password string `json:"-"`
}
u := User{Name: "Ada", Age: 0, Password: "segreto"}
b, _ := json.Marshal(u)
fmt.Println(string(b)) // {"nome":"Ada"}Age se omite (valor cero 0 + omitempty); Password es
excluido por completo.
Mariscal y Desmariscal
// struct -> JSON
b, err := json.Marshal(u)
// JSON -> struct (serve un PUNTATORE)
var u2 User
err = json.Unmarshal(b, &u2)Unmarshal solo acepta un puntero, porque tiene que escribir en los campos
del valor.
Otras etiquetas comunes
xml:"..."—encoding/xmlyaml:"..."— yaml.v3db:"..."— sqlx/pgxvalidate:"..."— patio de juegos/validadorform:"..."— enlace gin / eco
Las bibliotecas los leen mediante reflexión (reflect.StructTag.Get("json")):
son sólo hilos hasta que alguien los interpreta.
Pruébalo tú mismo
Agregue la etiqueta json:"name" al campo Nombre y la etiqueta json:"eta" al campo Edad.
Mostrar pista
Las etiquetas son cadenas sin formato entre comillas invertidas inmediatamente después del tipo de campo.
Solución disponible después de 3 intentos
Agregue la opción omitir al campo Edad: debe omitirse cuando sea 0.
Mostrar pista
Las opciones vienen después del nombre, separadas por comas: json:"name,omitempty".
Solución disponible después de 3 intentos
¿Qué imprime con las etiquetas json:"nombre" y json:"edad"?
u := User{Name: "Ada", Age: 36}
b, _ := json.Marshal(u)
fmt.Println(string(b))Resumen
- Las etiquetas son cadenas sin formato entre comillas invertidas:
`key:"value" key2:"value2"`. json:"name": rinomina.omitempty__PH_INLINE_CODE _4__-: esclude.- Campi NON esportati (minuscoli) sono ignorati da
codificación/json. json.Marshal(v)↔json.Unmarshal(datos, &v)(puntatore).- Stesso meccanismo per
xml,yaml,db,validar,form,…