Saltearse al contenido

Compilar con reemplazo de JSON

Gin usa el paquete de la biblioteca estándar encoding/json para la serialización y deserialización JSON por defecto. El codificador de la biblioteca estándar está bien probado y es completamente compatible, pero no es la opción más rápida disponible. Si el rendimiento de JSON es un cuello de botella en tu aplicación — por ejemplo, en APIs de alto rendimiento que serializan payloads de respuesta grandes — puedes intercambiarlo por un reemplazo directo más rápido en tiempo de compilación usando etiquetas de compilación. No se requieren cambios de código.

Reemplazos disponibles

Gin soporta tres codificadores JSON alternativos. Cada uno implementa la misma interfaz que Gin espera, por lo que tus handlers, middleware y lógica de enlace continúan funcionando sin modificación.

go-json

go-json es un codificador JSON puro en Go que ofrece mejoras significativas de rendimiento sobre encoding/json mientras mantiene compatibilidad completa. Funciona en todas las plataformas y arquitecturas.

Ventana de terminal
go build -tags=go_json .

jsoniter

jsoniter (json-iterator) es otra biblioteca JSON de alto rendimiento pura en Go. Es compatible con la API de encoding/json y proporciona un sistema de configuración flexible para casos de uso avanzados.

Ventana de terminal
go build -tags=jsoniter .

sonic

sonic es un codificador JSON extremadamente rápido desarrollado por ByteDance. Usa compilación JIT e instrucciones SIMD para lograr el máximo rendimiento, convirtiéndolo en la opción más rápida entre las tres.

Ventana de terminal
go build -tags="sonic avx" .

Elegir un reemplazo

CodificadorSoporte de plataformaFortaleza clave
encoding/json (predeterminado)TodosMáxima compatibilidad, sin dependencia extra
go-jsonTodosBuena mejora de velocidad, puro Go, amplia compatibilidad
jsoniterTodosBuena mejora de velocidad, configuración flexible
sonicSolo x86_64 con AVXMayor rendimiento vía JIT y SIMD

Para la mayoría de las aplicaciones, go-json es una opción segura y efectiva — funciona en todas partes y proporciona ganancias de rendimiento significativas. Elige sonic cuando necesites el máximo rendimiento de JSON y tus servidores ejecuten hardware x86_64. Elige jsoniter si necesitas sus características específicas de configuración o ya lo estás usando en otro lugar de tu código.

Verificar el reemplazo

Puedes confirmar que el reemplazo está activo comparando el rendimiento de serialización con un benchmark simple, o verificando la tabla de símbolos del binario:

Ventana de terminal
# Build with go-json
go build -tags=go_json -o myapp .
# Check that go-json symbols are present
go tool nm myapp | grep goccy

La etiqueta de compilación también funciona con otros comandos de Go:

Ventana de terminal
go run -tags=go_json .
go test -tags=go_json ./...