Mejores Prácticas de Serialización
Convenciones del equipo para etiquetas JSON, límites de decodificación, orden de validación y pruebas de evolución.
Busca en todas las páginas de la documentación
Convenciones del equipo para etiquetas JSON, límites de decodificación, orden de validación y pruebas de evolución.
Los errores de serialización se manifiestan como pérdida silenciosa de datos, no como errores de compilación.
Estas reglas mantienen los formatos de comunicación estables a través de despliegues y versiones de clientes.
userId y user_id.json, db y validate alineadas en structs compartidos, a menos que un esquema heredado fuerce una excepción documentada. Grep detecta desviaciones en la revisión.json:"-" para secretos y campos solo internos. Nunca registre el struct completo si existen campos sensibles sin redacción.map[string]any para APIs públicas estables. Los mapas ocultan el esquema de los compiladores y OpenAPI.r.Body con http.MaxBytesReader antes de cualquier decodificación. Rechace cargas útiles excesivas antes de que los ataques de asignación tengan éxito.json.NewDecoder en rutas de solicitud; establezca DisallowUnknownFields solo para APIs internas/de administración estrictas. Las APIs públicas se mantienen permisivas para compatibilidad futura.go-playground/validator (o equivalente) inmediatamente después de decodificar. La serialización no es validación.validator.ValidationErrors a JSON de problema documentado.Content-Type: application/json; charset=utf-8 en las respuestas JSON. Los clientes y las cachés dependen de encabezados explícitos.MarshalJSON y UnmarshalJSON simétricos al personalizar tipos. Las pruebas de ida y vuelta son obligatorias.type alias T dentro de los métodos.testdata/. CI decodifica cargas útiles antiguas en structs nuevos.Unmarshal en DTOs sensibles a la seguridad. Detecte panics y combinaciones de tipos inesperadas tempranamente.json.RawMessage. Maneje tipos de eventos desconocidos sin bloquear trabajadores.Nivel A: límites de tamaño de cuerpo en manejadores, pruebas JSON doradas para DTOs públicos y validador en puntos de entrada de creación/actualización.
La nomenclatura de etiquetas se aplica en la revisión a menos que se configure un linter.
Solo los structs que cruzan los límites HTTP y SQL necesitan json, db y validate.
Divida los DTOs cuando las formas diverjan materialmente.
Manténgase permisivo por defecto.
Use métricas y diff de OpenAPI en CI para detectar errores tipográficos del cliente sin romper aplicaciones antiguas.
Cuando las respuestas deben ocultar campos de solo escritura, unir columnas o formas versionadas.
No reutilice modelos de base de datos para JSON público a ciegas.
gin, echo y chi todavía necesitan límites de cuerpo explícitos y cableado de validación.
Los enlazadores de frameworks no reemplazan la defensa en profundidad.
Protobuf posee el contrato en el cable.
Aplique la misma disciplina de evolución a los nombres de campo JSON transcodificados documentados para navegadores.
Sí: validator.New() a nivel de paquete con registros personalizados en init.
Evite la creación de motores por solicitud.
Los consumidores de cola decodifican JSON de la misma manera que HTTP.
Aplique límites de tamaño a los bytes de mensaje del cliente del broker.
Nomenclatura JSON, política de decodificación estricta vs. permisiva, formato por límite y plazos de deprecación.
Enlace a fixtures de testdata.
Copie la plantilla de manejador del equipo: MaxBytesReader, decodificar, validar, mapear errores.
Dirija a los ingenieros primero a Conceptos Básicos de Serialización.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (GC por defecto Green Tea, go fix modernizers - verifique el parche en la compilación), chi (última - verifique en la compilación), gin (última - verifique en la compilación), echo (última - verifique en la compilación), google.golang.org/grpc (última - verifique en la compilación), sigs.k8s.io/controller-runtime (última - verifique en la compilación), kubebuilder (última - verifique en la compilación), tinygo (última - verifique los objetivos de placa en la compilación), wazero (última - verifique en la compilación) y golangci-lint (última - verifique el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 18 jul 2026