Saltar al contenido principal
eLearner.app
Módulo 5 · Lección 4 de 524/50 en el curso~12 min
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

Go
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:

Go
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:

EtiquetasEfecto
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
Go
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

Go
// 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/xml
  • yaml:"..." — yaml.v3
  • db:"..." — sqlx/pgx
  • validate:"..." — patio de juegos/validador
  • form:"..." — 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

Ejercicio#go.m5.l4.e1
Intentos: 0Cargando...

Agregue la etiqueta json:"name" al campo Nombre y la etiqueta json:"eta" al campo Edad.

Cargando editor...
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

Ejercicio#go.m5.l4.e2
Intentos: 0Cargando...

Agregue la opción omitir al campo Edad: debe omitirse cuando sea 0.

Cargando editor...
Mostrar pista

Las opciones vienen después del nombre, separadas por comas: json:"name,omitempty".

Solución disponible después de 3 intentos

Cuestionario#go.m5.l4.e3
Listo

¿Qué imprime con las etiquetas json:"nombre" y json:"edad"?

Go
u := User{Name: "Ada", Age: 36}
b, _ := json.Marshal(u)
fmt.Println(string(b))
Opciones de respuesta

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,…