Pular para o conteúdo

Build com substituição de JSON

O Gin usa o pacote encoding/json da biblioteca padrão para serialização e deserialização JSON por padrão. O encoder da biblioteca padrão é bem testado e totalmente compatível, mas não é a opção mais rápida disponível. Se o desempenho de JSON é um gargalo na sua aplicação — por exemplo, em APIs de alta vazão que serializam grandes payloads de resposta — você pode substituí-lo por uma alternativa mais rápida em tempo de build usando tags de build. Nenhuma alteração de código é necessária.

Substituições disponíveis

O Gin suporta três encoders JSON alternativos. Cada um implementa a mesma interface que o Gin espera, então seus handlers, middleware e lógica de binding continuam funcionando sem modificação.

go-json

go-json é um encoder JSON puro em Go que oferece melhorias significativas de desempenho em relação ao encoding/json mantendo total compatibilidade. Funciona em todas as plataformas e arquiteturas.

Terminal window
go build -tags=go_json .

jsoniter

jsoniter (json-iterator) é outra biblioteca JSON pura em Go de alto desempenho. É compatível com a API do encoding/json e fornece um sistema de configuração flexível para casos de uso avançados.

Terminal window
go build -tags=jsoniter .

sonic

sonic é um encoder JSON extremamente rápido desenvolvido pela ByteDance. Utiliza compilação JIT e instruções SIMD para alcançar o máximo de vazão, tornando-o a opção mais rápida entre as três.

Terminal window
go build -tags="sonic avx" .

Escolhendo uma substituição

EncoderSuporte a plataformasPonto forte
encoding/json (padrão)TodasMáxima compatibilidade, sem dependência extra
go-jsonTodasBoa aceleração, puro Go, ampla compatibilidade
jsoniterTodasBoa aceleração, configuração flexível
sonicApenas x86_64 com AVXMaior vazão via JIT e SIMD

Para a maioria das aplicações, go-json é uma escolha segura e eficaz — funciona em todos os lugares e fornece ganhos de desempenho significativos. Escolha sonic quando precisar de vazão máxima de JSON e seus servidores rodarem em hardware x86_64. Escolha jsoniter se precisar de seus recursos específicos de configuração ou já estiver usando-o em outro lugar no seu código.

Verificando a substituição

Você pode confirmar que a substituição está ativa comparando o desempenho de serialização com um benchmark simples, ou verificando a tabela de símbolos do binário:

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

A tag de build também funciona com outros comandos Go:

Terminal window
go run -tags=go_json .
go test -tags=go_json ./...