ساخت با جایگزین JSON
Gin به طور پیشفرض از پکیج encoding/json کتابخانه استاندارد برای سریالسازی و deserialization JSON استفاده میکند. رمزگذار کتابخانه استاندارد به خوبی تست شده و کاملاً سازگار است، اما سریعترین گزینه موجود نیست. اگر عملکرد JSON یک گلوگاه در برنامه شماست — مثلاً در APIهای با توان عملیاتی بالا که بارهای پاسخ بزرگ را سریالسازی میکنند — میتوانید یک جایگزین سریعتر را در زمان ساخت با استفاده از تگهای ساخت تعویض کنید. نیازی به تغییر کد نیست.
جایگزینهای موجود
Gin از سه رمزگذار جایگزین JSON پشتیبانی میکند. هر کدام همان رابطی را که Gin انتظار دارد پیادهسازی میکند، بنابراین handlerها، میانافزار و منطق اتصال شما بدون تغییر به کار خود ادامه میدهند.
go-json
go-json یک رمزگذار JSON خالص Go است که بهبود عملکرد قابل توجهی نسبت به encoding/json ارائه میدهد و در عین حال سازگاری کامل را حفظ میکند. روی تمام پلتفرمها و معماریها کار میکند.
go build -tags=go_json .jsoniter
jsoniter (json-iterator) یک کتابخانه JSON دیگر با عملکرد بالا و خالص Go است. با API سازگار با encoding/json و یک سیستم پیکربندی انعطافپذیر برای موارد استفاده پیشرفته.
go build -tags=jsoniter .sonic
sonic یک رمزگذار JSON بسیار سریع است که توسط ByteDance توسعه یافته است. از کامپایل JIT و دستورات SIMD برای دستیابی به حداکثر توان عملیاتی استفاده میکند و آن را سریعترین گزینه در بین این سه میسازد.
go build -tags="sonic avx" .انتخاب جایگزین
| رمزگذار | پشتیبانی پلتفرم | نقطه قوت کلیدی |
|---|---|---|
encoding/json (پیشفرض) | همه | حداکثر سازگاری، بدون وابستگی اضافی |
| go-json | همه | افزایش سرعت خوب، خالص Go، سازگاری گسترده |
| jsoniter | همه | افزایش سرعت خوب، پیکربندی انعطافپذیر |
| sonic | فقط x86_64 با AVX | بالاترین توان عملیاتی از طریق JIT و SIMD |
برای اکثر برنامهها، go-json یک انتخاب امن و مؤثر است — همه جا کار میکند و بهبود عملکرد معناداری ارائه میدهد. sonic را زمانی انتخاب کنید که نیاز به حداکثر توان عملیاتی JSON دارید و سرورهای شما روی سختافزار x86_64 اجرا میشوند. jsoniter را انتخاب کنید اگر نیاز به ویژگیهای پیکربندی خاص آن دارید یا قبلاً در جای دیگری از کد خود از آن استفاده میکنید.
تأیید جایگزین
میتوانید با مقایسه عملکرد سریالسازی با یک بنچمارک ساده یا بررسی جدول نمادهای باینری تأیید کنید که جایگزین فعال است:
# Build with go-jsongo build -tags=go_json -o myapp .
# Check that go-json symbols are presentgo tool nm myapp | grep goccyتگ ساخت با سایر دستورات Go نیز کار میکند:
go run -tags=go_json .go test -tags=go_json ./...