Los structs de producción a menudo llevan tres espacios de nombres de etiquetas en un solo campo: json para APIs, db o claves específicas de ORM para almacenamiento y validate para reglas de entrada.
Una nomenclatura consistente entre las etiquetas mantiene alineados los serializadores, los escáneres SQL y los validadores sin capas de DTO duplicadas.
Las etiquetas de struct son metadatos de cadena adjuntos a los campos, leídos mediante reflexión en tiempo de ejecución.
Cada biblioteca analiza su propia clave (json, db, validate, xml, yaml, etc.).
Un solo struct puede servir a las capas HTTP y de base de datos cuando las etiquetas coinciden en el significado del campo pero difieren en los nombres de cable/columna.
// Lint: mantener los nombres json y db alineados a menos que el esquema heredado difiera// validate:"-" omite la validación para timestamps establecidos por el servidor
Los verificadores de etiquetas de golangci-lint (cuando están habilitados) marcan nombres de campos JSON que no coinciden con los nombres de campos de Go.
json ignorado en campos no exportados - Las etiquetas en campos en minúscula no hacen nada para encoding/json. Solución: exporta los campos de la API o usa marshaler personalizados.
validate nunca se ejecuta automáticamente - Las etiquetas son inertes hasta que llamas a validator.Struct. Solución: valida en los manejadores después de Unmarshal.
etiquetas db sin la biblioteca correcta - database/sql por sí solo ignora las etiquetas db. Solución: usa sqlx/scany o listas de columnas explícitas.
omitempty en punteros vs valores - Los enteros cero siempre se codifican a menos que sea omitempty; los punteros nil se omiten. Solución: modela números opcionales como punteros cuando 0 sea significativo.
Desviación de etiquetas en migraciones - Renombrar una columna sin actualizar las etiquetas db causa escaneos NULL silenciosos. Solución: pruebas de integración para repositorios.
Claves JSON conflictivas - Los structs incrustados pueden producir claves JSON duplicadas. Solución: renombra etiquetas o aplana con marshaler personalizados.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (GC por defecto de Green Tea, go fix modernizers - verifica el parche en la compilación), chi (última - verifica en la compilación), gin (última - verifica en la compilación), echo (última - verifica en la compilación), google.golang.org/grpc (última - verifica en la compilación), sigs.k8s.io/controller-runtime (última - verifica en la compilación), kubebuilder (última - verifica en la compilación), tinygo (última - verifica los objetivos de la placa en la compilación), wazero (última - verifica en la compilación) y golangci-lint (última - verifica el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 18 jul 2026