البنية
يتكوّن go-like من حزم مسطّحة قابلة للنشر، لا من حاوية إطار عمل ضخمة. تجمع @go-like/core خوادم أُنشئت بصورة مستقلة، ويحمل @go-like/context الإلغاء والمواعيد النهائية والأسباب والقيم. أما حزم SPI الأخرى فتعرّف عقوداً ضيقة لمجال قدرة واحد، وتنفذها حزم المزوّدات من دون أن تتحول إلى خيارات افتراضية عامة.
تفصل البنية بين المسارات الرئيسية عمداً:
- مسار التطبيق مسؤول عن البدء، وقبول العمل، والخطافات، والنتائج النهائية. يستدعي Core الدالة
stop(ctx)بالتوازي لكل sibling Server، وينتظر terminal result لكل واحد ثم يجمع lifecycle failures؛ ولا يضمن الإيقاف بترتيب عكسي لترتيب التصريح. وعلى المكوّنات التي تحتاج إلى تنظيف مرتب أن تركّب هذا الترتيب بنفسها داخلServerواحد. - مسار الاستدعاء يجمع اكتشاف السجل، واختيار نقطة النهاية، واستدعاء العميل، وربط معالجات الخادم بطبقة النقل.
- مسار الأحداث يحافظ على دلالات التسليم الأصلية لوسيط الرسائل، مع طبقة ترميز نمطية اختيارية.
- مسار التشغيل يشمل لقطات الإعداد، والمخازن، وفحوص الصحة، والمقاييس، والتتبّع، ودورات حياة أدوات التسجيل الأصلية.
- حافة Web تستقبل معالجات Fetch القياسية، وهي ليست بروتوكول النقل الداخلي بين الخدمات.
تتجه الاعتماديات إلى الداخل نحو الواجهات القابلة للنقل. يجوز لحزمة مزوّد أن تعتمد على SDK رسمي أو مضيف خاص ببيئة تشغيل، لكن لا يجوز لطبقة SPI أن تعتمد عليها عكسياً. يسمح هذا الحد لتطبيق واحد بالعمل على Bun أو Node.js أو مضيف مستقبلي متوافق مع Web، من دون اختراع إطار عمل ضعيف يجمع القاسم الأدنى بينها.
لا يوجد service locator. ينشئ التطبيق اعتمادياته صراحة ويمررها إلى دوال الإنشاء. قد يبدو هذا التوصيل عملاً إضافياً صغيراً، لكنه يبيّن بوضوح من يملك الاتصالات والمراقبين والمستمعين وأعمال الإيقاف.
NOTE
هذه الصفحة ملخص محلي قابل للقراءة السريعة. تفصيل دورة الحياة، وملكية كل provider، ومسار الطلب الكامل موجود في الصفحة الإنجليزية canonical؛ لا تُحوّل هذه النسخة المختصرة إلى وعد بتكافؤ runtime.
خريطة الطلب ودورة الحياة
application composition root
-> Context: cancellation / deadline / values
-> Core App: admission / hooks / stop result
-> Web Handler -> runtime host -> listener
-> internal Client -> Discovery -> Selector -> Transport -> Server
App.stop()
-> deregister accepted instance
-> cancel server runtime
-> concurrent Server.stop calls
-> terminal joins -> one resultلا يثبت Server.start(ctx) أو afterStart وحده الجاهزية. انتظر endpoint(ctx) أو إشارة قبول خاصة بالمورد داخل hook قبل إعلان الجاهزية. يوقف Core الموارد الشقيقة بالتوازي؛ اجمع الموارد في مالك واحد إذا كان ترتيب الإيقاف ضرورياً.