رفتن به محتوا

ساخت با جایگزین JSON

Gin به طور پیش‌فرض از پکیج encoding/json کتابخانه استاندارد برای سریال‌سازی و deserialization JSON استفاده می‌کند. رمزگذار کتابخانه استاندارد به خوبی تست شده و کاملاً سازگار است، اما سریع‌ترین گزینه موجود نیست. اگر عملکرد JSON یک گلوگاه در برنامه شماست — مثلاً در APIهای با توان عملیاتی بالا که بارهای پاسخ بزرگ را سریال‌سازی می‌کنند — می‌توانید یک جایگزین سریع‌تر را در زمان ساخت با استفاده از تگ‌های ساخت تعویض کنید. نیازی به تغییر کد نیست.

جایگزین‌های موجود

Gin از سه رمزگذار جایگزین JSON پشتیبانی می‌کند. هر کدام همان رابطی را که Gin انتظار دارد پیاده‌سازی می‌کند، بنابراین handlerها، میان‌افزار و منطق اتصال شما بدون تغییر به کار خود ادامه می‌دهند.

go-json

go-json یک رمزگذار JSON خالص Go است که بهبود عملکرد قابل توجهی نسبت به encoding/json ارائه می‌دهد و در عین حال سازگاری کامل را حفظ می‌کند. روی تمام پلتفرم‌ها و معماری‌ها کار می‌کند.

Terminal window
go build -tags=go_json .

jsoniter

jsoniter (json-iterator) یک کتابخانه JSON دیگر با عملکرد بالا و خالص Go است. با API سازگار با encoding/json و یک سیستم پیکربندی انعطاف‌پذیر برای موارد استفاده پیشرفته.

Terminal window
go build -tags=jsoniter .

sonic

sonic یک رمزگذار JSON بسیار سریع است که توسط ByteDance توسعه یافته است. از کامپایل JIT و دستورات SIMD برای دستیابی به حداکثر توان عملیاتی استفاده می‌کند و آن را سریع‌ترین گزینه در بین این سه می‌سازد.

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

انتخاب جایگزین

رمزگذارپشتیبانی پلتفرمنقطه قوت کلیدی
encoding/json (پیش‌فرض)همهحداکثر سازگاری، بدون وابستگی اضافی
go-jsonهمهافزایش سرعت خوب، خالص Go، سازگاری گسترده
jsoniterهمهافزایش سرعت خوب، پیکربندی انعطاف‌پذیر
sonicفقط x86_64 با AVXبالاترین توان عملیاتی از طریق JIT و SIMD

برای اکثر برنامه‌ها، go-json یک انتخاب امن و مؤثر است — همه جا کار می‌کند و بهبود عملکرد معناداری ارائه می‌دهد. sonic را زمانی انتخاب کنید که نیاز به حداکثر توان عملیاتی JSON دارید و سرورهای شما روی سخت‌افزار x86_64 اجرا می‌شوند. jsoniter را انتخاب کنید اگر نیاز به ویژگی‌های پیکربندی خاص آن دارید یا قبلاً در جای دیگری از کد خود از آن استفاده می‌کنید.

تأیید جایگزین

می‌توانید با مقایسه عملکرد سریال‌سازی با یک بنچمارک ساده یا بررسی جدول نمادهای باینری تأیید کنید که جایگزین فعال است:

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

تگ ساخت با سایر دستورات Go نیز کار می‌کند:

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