مكتبة go-qrcode: توليد رموز QR بلغة Go (Golang)
\n\nأصبحت رموز QR جزءًا لا يتجزأ من الويب الحديث وتطبيقات الهواتف المحمولة. تُستخدم للانتقال السريع عبر الروابط، ونقل بيانات الاتصال، والمصادقة، وغير ذلك الكثير. إذا كان مشروعك مكتوبًا بلغة Go (Golang)، فإن واحدة من أفضل المكتبات لإنشاء رموز QR هي go-qrcode. في هذه المقالة، سنستعرض بالتفصيل إمكانياتها، وطريقة التثبيت، وأمثلة الاستخدام.
ما هي go-qrcode؟
\n\ngo-qrcode هي تطبيق نقي لمولد رموز QR بلغة Go. لا تحتوي على تبعيات خارجية (باستثناء المكتبة القياسية) وتدعم جميع الوظائف الأساسية: ضبط الحجم، ومستوى تصحيح الأخطاء، واللون، والخلفية. تستطيع المكتبة توليد صور PNG وكذلك إرجاع البيانات الثنائية الخام للمعالجة اللاحقة.
التثبيت
\n\nيتم تثبيت المكتبة باستخدام الأمر القياسي go get:
go get github.com/skip2/go-qrcode\n\nبعد ذلك، يمكنك استيرادها إلى مشروعك:
\n\nimport (\n "github.com/skip2/go-qrcode"\n)\n\nالإمكانيات الأساسية
\n\n- \n
- توليد صور PNG — حالة الاستخدام الأكثر شيوعًا. \n
- ضبط مستوى تصحيح الأخطاء — منخفض، متوسط، عالٍ، أعلى. \n
- تغيير الحجم — من 21x21 إلى 177x177 وحدة. \n
- ضبط الألوان — يمكن تحديد لون المقدمة والخلفية. \n
- دعم Unicode — يمكن ترميز أي نص، بما في ذلك السيريلية. \n
- الإخراج بتنسيق خام — مصفوفة بايت للمعالجة المخصصة. \n
أمثلة الكود
\n\n1. أبسط رمز QR
\n\nلنقم بتوليد رمز QR لرابط URL وحفظه في ملف:
\n\npackage main\n\nimport (\n "github.com/skip2/go-qrcode"\n)\n\nfunc main() {\n err := qrcode.WriteFile("https://pythonlib.ru", qrcode.Medium, 256, "qrcode.png")\n if err != nil {\n panic(err)\n }\n}\n\nفي هذا المثال، نستخدم مستوى تصحيح أخطاء متوسط (qrcode.Medium) وحجم صورة 256x256 بكسل.
2. ضبط الألوان
\n\nإذا كنت بحاجة إلى لون غير تقليدي لرمز QR، استخدم الهيكل qrcode.Config:
package main\n\nimport (\n "image/color"\n "github.com/skip2/go-qrcode"\n)\n\nfunc main() {\n qr, err := qrcode.New("مرحبًا بالعالم!", qrcode.Highest)\n if err != nil {\n panic(err)\n }\n\n // ضبط اللون\n qr.ForegroundColor = color.RGBA{R: 0, G: 150, B: 255, A: 255} // أزرق\n qr.BackgroundColor = color.RGBA{R: 255, G: 255, B: 255, A: 255} // أبيض\n\n err = qr.WriteFile(256, "custom_qrcode.png")\n if err != nil {\n panic(err)\n }\n}\n\n3. الحصول على PNG كبايتات
\n\nأحيانًا لا تحتاج إلى حفظ الملف، بل إلى تسليم الصورة عبر HTTP أو معالجتها لاحقًا. لهذا، استخدم الطريقة PNG():
package main\n\nimport (\n "fmt"\n "github.com/skip2/go-qrcode"\n)\n\nfunc main() {\n qr, err := qrcode.New("https://example.com", qrcode.Low)\n if err != nil {\n panic(err)\n }\n\n pngBytes, err := qr.PNG(256)\n if err != nil {\n panic(err)\n }\n\n fmt.Printf("حجم PNG: %d بايت\\n", len(pngBytes))\n // الآن يمكن إرسال pngBytes في استجابة HTTP أو حفظه\n}\n\n4. التوليد بأصغر حجم
\n\nإذا كنت ترغب في الحصول على أصغر رمز QR ممكن، استخدم الطريقة ToQRTerminal() للتصحيح في الطرفية، أو حدد الحد الأدنى لحجم الوحدة:
package main\n\nimport (\n "fmt"\n "github.com/skip2/go-qrcode"\n)\n\nfunc main() {\n qr, err := qrcode.New("1234567890", qrcode.High)\n if err != nil {\n panic(er