مولد رموز QR بلغة Go (Golang): مكتبة go-qrcode

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مكتبة go-qrcode: توليد رموز QR بلغة Go (Golang)

\n\n

أصبحت رموز QR جزءًا لا يتجزأ من الويب الحديث وتطبيقات الهواتف المحمولة. تُستخدم للانتقال السريع عبر الروابط، ونقل بيانات الاتصال، والمصادقة، وغير ذلك الكثير. إذا كان مشروعك مكتوبًا بلغة Go (Golang)، فإن واحدة من أفضل المكتبات لإنشاء رموز QR هي go-qrcode. في هذه المقالة، سنستعرض بالتفصيل إمكانياتها، وطريقة التثبيت، وأمثلة الاستخدام.

\n\n

ما هي go-qrcode؟

\n\n

go-qrcode هي تطبيق نقي لمولد رموز QR بلغة Go. لا تحتوي على تبعيات خارجية (باستثناء المكتبة القياسية) وتدعم جميع الوظائف الأساسية: ضبط الحجم، ومستوى تصحيح الأخطاء، واللون، والخلفية. تستطيع المكتبة توليد صور PNG وكذلك إرجاع البيانات الثنائية الخام للمعالجة اللاحقة.

\n\n

التثبيت

\n\n

يتم تثبيت المكتبة باستخدام الأمر القياسي go get:

\n\n
go get github.com/skip2/go-qrcode
\n\n

بعد ذلك، يمكنك استيرادها إلى مشروعك:

\n\n
import (\n    "github.com/skip2/go-qrcode"\n)
\n\n

الإمكانيات الأساسية

\n\n
    \n
  • توليد صور PNG — حالة الاستخدام الأكثر شيوعًا.
  • \n
  • ضبط مستوى تصحيح الأخطاء — منخفض، متوسط، عالٍ، أعلى.
  • \n
  • تغيير الحجم — من 21x21 إلى 177x177 وحدة.
  • \n
  • ضبط الألوان — يمكن تحديد لون المقدمة والخلفية.
  • \n
  • دعم Unicode — يمكن ترميز أي نص، بما في ذلك السيريلية.
  • \n
  • الإخراج بتنسيق خام — مصفوفة بايت للمعالجة المخصصة.
  • \n
\n\n

أمثلة الكود

\n\n

1. أبسط رمز QR

\n\n

لنقم بتوليد رمز QR لرابط URL وحفظه في ملف:

\n\n
package 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 بكسل.

\n\n

2. ضبط الألوان

\n\n

إذا كنت بحاجة إلى لون غير تقليدي لرمز QR، استخدم الهيكل qrcode.Config:

\n\n
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\n

3. الحصول على PNG كبايتات

\n\n

أحيانًا لا تحتاج إلى حفظ الملف، بل إلى تسليم الصورة عبر HTTP أو معالجتها لاحقًا. لهذا، استخدم الطريقة PNG():

\n\n
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\n

4. التوليد بأصغر حجم

\n\n

إذا كنت ترغب في الحصول على أصغر رمز QR ممكن، استخدم الطريقة ToQRTerminal() للتصحيح في الطرفية، أو حدد الحد الأدنى لحجم الوحدة:

\n\n
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                    

توصيات