0Pricing
Go Academy · درس

أساسيات حزمة Go plugin

بناء ملفات .so واستخدام plugin.Open وLookup

أساسيات حزمة Go plugin درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

ما حزمة plugin في Go؟

تتيح حزمة plugin (بدءًا من Go 1.8) تحميل المكتبات المشتركة المترجمة .so في وقت التشغيل، واستدعاء الدوال والمتغيرات المُصدَّرة منها.

إنشاء إضافة

يمكن ترجمة ملف Go كإضافة باستخدام -buildmode=plugin:

// greeter/greeter.go
package main
func Greet(name string) string { return "Hello, " + name }

تحميل إضافة

حمّل ملف .so وابحث عن الرموز المُصدَّرة:

p, err := plugin.Open("./greeter.so")
if err != nil { log.Fatal(err) }

sym, err := p.Lookup("Greet")
if err != nil { log.Fatal(err) }

greet, ok := sym.(func(string) string)
if !ok { log.Fatal("wrong type") }
fmt.Println(greet("World"))

قيود الإضافات

يجب أن تكون جميع الحزم التي تستوردها الإضافة والمضيف من إصدارات متطابقة. ويجب أن تستخدم الإضافة package main. ولا يمكن إلغاء تحميل الإضافات بعد تحميلها.

أنواع الرموز

تعيد plugin.Lookup قيمة من النوع any. أكّد نوعها وفق توقيع الدالة أو نوع المتغير المتوقع. وتؤدي حالات عدم التطابق إلى حدوث حالات panic في وقت التشغيل.

قيود المنصات

تعمل حزمة plugin على Linux وmacOS، لكنها لا تعمل على Windows أو عند استخدام CGO_ENABLED=0. كما أنها لا تدعم الترجمة المتقاطعة إلى أهداف الإضافات.

التوافق بين الإصدارات

يجب ترجمة الإضافة والمضيف باستخدام إصدار Go نفسه، وإصدارات متطابقة من جميع الحزم المشتركة. ويؤدي عدم تطابق الإصدارات إلى فشل تحميل الإضافة.

حالات الاستخدام

تناسب الإضافات أنظمة إدارة المحتوى التي تستخدم معالجات يوفّرها المستخدمون، وقواعد البيانات ذات الواجهات الخلفية القابلة للتبديل للتخزين، والتطبيقات التي تحتاج إلى ملحقات تُحمّل في وقت التشغيل دون إعادة ترجمة المضيف.

البدائل

للحصول على مرونة أكبر، استخدم إضافات قائمة على RPC (مثل HashiCorp go-plugin)، أو وحدات WebAssembly، أو لغة برمجة نصية (مثل Lua أو Starlark) مضمّنة في المضيف بدلًا من الإضافات الأصلية.

تصحيح أخطاء الإضافات

ألم تُعثر على رموز الإضافة؟ تحقق من استخدام package main الصحيح، ومن أن الرمز مُصدَّر (يبدأ بحرف كبير)، ومن تطابق علامات البناء وإصدارات الوحدات، ومن توافق المنصة.

تحميل الإضافة عملية أحادية الاتجاه

بمجرد تحميل الإضافة، لا يمكن إلغاء تحميلها. صمّم الأنظمة بحيث تتحمل بقاء جميع الإضافات المحمّلة نشطة طوال عمر العملية.

تحقق سريع

ما أحد القيود الأساسية لحزمة plugin في Go مقارنةً بـ HashiCorp go-plugin؟

مراجعة: حزمة plugin في Go

النقاط الأساسية:

  • أنشئ الإضافة باستخدام -buildmode=plugin، وحمّلها باستخدام plugin.Open
  • يعيد plugin.Lookup قيمة من النوع any؛ أكّد نوعها وفق النوع المتوقع
  • تعمل على Linux وmacOS فقط؛ وتتطلب تطابق الإصدارات؛ ولا تدعم إلغاء التحميل
  • فضّل go-plugin (القائم على RPC) للحصول على مرونة عبر المنصات

الأسئلة الشائعة

هل درس «أساسيات حزمة Go plugin» مجاني؟

نعم — نص درس «أساسيات حزمة Go plugin» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «أساسيات حزمة Go plugin»؟

بناء ملفات .so واستخدام plugin.Open وLookup تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «أساسيات حزمة Go plugin»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات حزمة Go plugin
  2. تصميم واجهة Plugin
  3. التحميل الديناميكي والرموز
  4. بدائل: HashiCorp go-plugin
← العودة إلى Go Academy