Lewati ke konten

Build dengan penggantian JSON

Gin menggunakan paket encoding/json pustaka standar untuk serialisasi dan deserialisasi JSON secara default. Encoder pustaka standar telah diuji dengan baik dan sepenuhnya kompatibel, tetapi bukan opsi tercepat yang tersedia. Jika performa JSON menjadi bottleneck dalam aplikasi Anda — misalnya, dalam API throughput tinggi yang menyerialisasi payload respons besar — Anda dapat mengganti dengan pengganti drop-in yang lebih cepat pada waktu build menggunakan tag build. Tidak diperlukan perubahan kode.

Pengganti yang tersedia

Gin mendukung tiga encoder JSON alternatif. Masing-masing mengimplementasikan antarmuka yang sama yang diharapkan Gin, sehingga handler, middleware, dan logika binding Anda terus bekerja tanpa modifikasi.

go-json

go-json is a pure-Go JSON encoder that offers significant performance improvements over encoding/json while maintaining full compatibility. It works on all platforms and architectures.

Terminal window
go build -tags=go_json .

jsoniter

jsoniter (json-iterator) is another pure-Go, high-performance JSON library. It is API-compatible with encoding/json and provides a flexible configuration system for advanced use cases.

Terminal window
go build -tags=jsoniter .

sonic

sonic is a blazing-fast JSON encoder developed by ByteDance. It uses JIT compilation and SIMD instructions to achieve maximum throughput, making it the fastest option among the three.

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

Memilih pengganti

EncoderPlatform supportKey strength
encoding/json (default)AllMaximum compatibility, no extra dependency
go-jsonAllGood speedup, pure Go, broad compatibility
jsoniterAllGood speedup, flexible configuration
sonicx86_64 with AVX onlyHighest throughput via JIT and SIMD

Untuk sebagian besar aplikasi, go-json adalah pilihan yang aman dan efektif — bekerja di mana saja dan memberikan peningkatan performa yang berarti. Pilih sonic ketika Anda membutuhkan throughput JSON maksimum dan server Anda berjalan pada hardware x86_64. Pilih jsoniter jika Anda membutuhkan fitur konfigurasi spesifiknya atau sudah menggunakannya di tempat lain dalam kode Anda.

Memverifikasi pengganti

Anda dapat mengonfirmasi bahwa pengganti aktif dengan membandingkan performa serialisasi dengan benchmark sederhana, atau dengan memeriksa tabel simbol binary:

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

The build tag also works with other Go commands:

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