مقدمة في إدارة التبعية في Go
تعد إدارة التبعية جانبًا مهمًا في أي مشروع برمجي ، حيث إنها تساعد في إدارة إصدارات المكتبات والحزم التي يعتمد عليها مشروعك. في Go (Golang) ، تضمن إدارة التبعية أن مشاريع Go الخاصة بك قابلة للتكرار ويمكن صيانتها من خلال تسهيل حل مشكلات الإصدار ، والحفاظ على التوافق مع الحزم الأخرى ، وتبسيط عملية التطوير الشاملة.
قبل Go Modules ، كانت إدارة التبعية في Go أقل انسيابية. غالبًا ما يلجأ المطورون إلى استخدام أدوات مثل dep
أو glide
أو govendor
لإدارة تبعياتهم. على الرغم من أن هذه الأدوات كانت مفيدة ، إلا أنها لم تكن جزءًا من مشروع Go الرسمي ، وبالتالي خلقت احتكاكًا في اعتماد Go كلغة لبعض المطورين.
وحدات عصر Go
في عام 2018 ، قدم فريق Go مفهوم "الوحدات النمطية" ، وهو معيار جديد لإدارة التبعية في مشروعات Go. الوحدات النمطية هي مجموعات من الحزم ذات الصلة التي تم إصدارها معًا ، مما يوفر جميع التبعيات الضرورية لقاعدة التعليمات البرمجية الخاصة بك. مع تقديم Go Modules في Go 1.11 ، أصبحت إدارة التبعية أبسط وأكثر تنوعًا ومدعومة رسميًا من قبل مشروع Go. قدمت وحدات Go Modules ميزات مثل:
- إصدار التبعية باستخدام الإصدار الدلالي (SemVer)
- أوامر إدارة التبعية المبسطة (على سبيل المثال ،
go get
،go mod tidy
) - الإنشاء التلقائي لملف البيان (
go.mod
) الذي يحتوي على معلومات التبعية التفصيلية - التنزيل التلقائي والتخزين المؤقت للاعتماديات المطلوبة
مع Go Modules ، لم يعد مطلوبًا منك وضع الكود الخاص بك في دليل $GOPATH
، والذي كان في السابق قيدًا في تطوير Go. يتيح هذا النظام الجديد بنية مشروع أكثر مرونة ، مما يسهل العمل على مشاريع Go عند التبديل بين المستودعات المختلفة.
إعداد مشروع Go Module الخاص بك
يعد بدء استخدام وحدات Go Modules أمرًا سهلاً. اتبع الخطوات أدناه لإعداد مشروع Go Modules جديد.
- أولاً ، تأكد من تثبيت Go الإصدار 1.11 أو إصدار أحدث على نظامك. يمكنك التحقق من إصدار Go الخاص بك عن طريق تشغيل
go version
في المحطة. - انتقل إلى الموقع الذي تريده وأنشئ مجلد مشروع جديدًا باسم وصفي ، على سبيل المثال ،
my-go-project
. - انتقل إلى المجلد الذي تم إنشاؤه حديثًا في سطر الأوامر.
- قم بتهيئة وحدة Go جديدة عن طريق تشغيل الأمر
go mod init
، متبوعًا بمسار الوحدة النمطية. على سبيل المثال ، يمكنك تشغيلgo mod init github.com/your-username/my-go-project
إذا كنت تنوي استضافة المشروع على GitHub. ينشئ هذا الأمر ملفًا جديدًا باسمgo.mod
داخل مجلد مشروعك.
يعد ملف go.mod
هو قلب مشروع Go Modules الخاص بك. يحتوي على بيانات وصفية حول الوحدة ، مثل اسمها ، وتسرد جميع التبعيات التي تتطلبها. ستتفاعل مع ملف go.mod
طوال دورة حياة مشروع Go لإدارة تبعياتك. الآن بعد أن تم إعداد مشروع Go Module الخاص بك ، فأنت جاهز لبدء إضافة وإدارة التبعيات باستخدام نظام Go Modules.
إدارة التبعيات داخل وحدات Go
توفر وحدات Go نهجًا مباشرًا وفعالًا لإدارة تبعيات مشروعك. يسمح لك بإضافة إصدارات تبعية معينة أو تحديثها أو إزالتها ، مما يساعدك في الحفاظ على التحكم في مشروعك وتفاعلاته مع الحزم الأخرى. سيرشدك هذا القسم خلال عملية إدارة التبعيات ضمن مشروع Go Modules الخاص بك.
إضافة التبعية
لإضافة تبعية جديدة ، كل ما عليك فعله هو استيراد الحزمة المطلوبة في كود Go الخاص بك. على سبيل المثال ، إذا كنت تريد إضافة github.com/gorilla/mux
إلى مشروعك ، فاستورده على النحو التالي:
يستورد ( "github.com/gorilla/mux" )
في المرة التالية التي تقوم فيها بتشغيل go build
or go test
، سيقوم Go تلقائيًا بتنزيل الحزمة المطلوبة ، وتحديث ملفات go.mod
و go.sum
، وتهيئة مشروعك لاستخدام الحزمة المحددة. بدلاً من ذلك ، يمكنك استخدام الأمر go get
لإضافة تبعية جديدة بشكل صريح:
اذهب للحصول على github.com/gorilla/mux
لن يؤدي ذلك إلى جلب الحزمة فحسب ، بل سيؤدي أيضًا إلى تحديث ملفات go.mod
و go.sum
الخاصة بمشروعك.
تحديث التبعية
لتحديث تبعية معينة إلى إصدار جديد ، استخدم الأمر go get
متبوعًا بمسار استيراد الحزمة ورقم الإصدار المطلوب:
اذهب للحصول على github.com/gorilla/[email protected]
سيقوم هذا الأمر بتحديث ملف go.mod
بالإصدار الجديد من الحزمة وتنزيل كود المصدر الخاص به. لاحظ أنه إذا أدخلت الحزمة المحدّثة تغييرات متقطعة ، فقد تحتاج إلى تعديل الكود وفقًا لذلك.
إزالة التبعية
لإزالة تبعية من مشروعك ، أولاً ، احذف عبارات الاستيراد المقابلة من التعليمات البرمجية المصدر. بعد ذلك ، قم بتشغيل الأمر go mod tidy
لتنظيف ملف go.mod
:
اذهب الى وزارة الدفاع مرتبة
سيؤدي هذا الأمر إلى إزالة أي تبعيات غير مستخدمة من ملف go.mod
والتأكد من بقاء مشروعك نظيفًا ومنظمًا.
الإصدار الدلالي ووحدات Go
التعيين الدلالي (Semantic Versioning) هو نظام إصدار معتمد على نطاق واسع يقوم بتعيين أرقام إصدارات فريدة لإصدارات البرامج. يستخدم تنسيق ترقيم من ثلاثة أجزاء: Major. Minor.Patch (على سبيل المثال ، 1.2.3). في SemVer:
- تشير التغييرات الرئيسية في الإصدار إلى حدوث تغييرات فاصلة وتتطلب تعديلات يدوية على الكود.
- تقدم التغييرات الطفيفة في الإصدار ميزات جديدة مع الحفاظ على التوافق مع الإصدارات السابقة.
- تتضمن تغييرات إصدار التصحيح إصلاحات للأخطاء وتحسينات طفيفة في الأداء ، ومتوافقة أيضًا مع الإصدارات السابقة.
تدمج وحدات Go Modules Semantic Versioning للتعامل مع إصدار التبعية ، مما يسمح للمطورين بإدارة التحديثات ، والتوافق مع الإصدارات السابقة ، وكسر التغييرات بسهولة أكبر. عند تحديد إصدارات التبعية باستخدام Go Modules ، يمكنك استخدام نطاقات الإصدارات أو أرقام إصدارات محددة. على سبيل المثال: - لجلب أحدث إصدار مستقر من الحزمة ، استخدم مسار استيراد الحزمة بدون رقم الإصدار: go get github.com/gorilla/mux
. - لجلب إصدار معين ، أضف رقم الإصدار بعد الرمز @
: go get github.com/gorilla/[email protected]
. - لجلب آخر تحديث ثانوي أو تصحيح ضمن إصدار رئيسي معين ، استخدم الرمز ^
(علامة الإقحام): go get github.com/gorilla/mux@^v1.0.0
.
أوامر وحدات Go الشائعة واستخداماتها
فيما يلي بعض أوامر Go Modules الأكثر استخدامًا وسيناريوهات استخدامها:
اذهب mod init
go mod init
يهيئ مشروع Go Modules جديد داخل الدليل الحالي. يقوم بإنشاء ملف go.mod
، والذي يحتوي على معلومات حول الوحدة النمطية وتبعياتها وقيود الإصدار.
انتقل إلى mod init example.com/myproject
استبدل example.com/myproject
بمسار الوحدة الخاصة بك.
إذهب احضر
go get
هو أمر متعدد الاستخدامات يستخدم لإضافة أو تحديث أو إزالة تبعية. قم بتوفير مسار استيراد الحزمة ، متبوعًا بشكل اختياري برقم إصدار أو نطاق.
اذهب للحصول على github.com/gorilla/[email protected]
يقوم هذا الأمر بإضافة حزمة github.com/gorilla/mux
أو تحديثها إلى الإصدار v1.8.0.
اذهب الى وزارة الدفاع مرتبة
يقوم go mod tidy
بإزالة التبعيات غير المستخدمة من ملف go.mod
وتحديثه ليعكس عبارات الاستيراد في الكود المصدري لمشروعك.
اذهب الى وزارة الدفاع مرتبة
قم بتشغيل هذا الأمر بعد إزالة عبارات الاستيراد للتبعيات غير المرغوب فيها.
الذهاب الرسم البياني
يعرض go mod graph
شجرة التبعية للمشروع ، ويظهر التبعيات المباشرة وغير المباشرة بتنسيق يمكن قراءته. يمكن أن يكون هذا الأمر مفيدًا عند تصحيح أخطاء التبعية المعقدة.
الذهاب الرسم البياني
انتقل وزارة الدفاع تحقق
go mod verify
تحقق من سلامة التبعيات المدرجة في ملف go.sum
. إذا كان المجموع الاختباري للاعتماد لا يتطابق مع القيمة المسجلة ، فإن الأمر سيبلغ عن خطأ.
انتقل وزارة الدفاع تحقق
حل نزاعات التبعية
يمكن أن تنشأ تعارضات التبعية عندما يعتمد مشروعك على حزم متعددة بمتطلبات إصدار مختلفة للاعتماديات المشتركة. توفر وحدات Go Modules آلية مضمنة للتعامل مع هذه التعارضات باستخدام توجيهات replace
exclude
في ملف go.mod
.
توجيه الاستبدال
يسمح لك توجيه replace
بتغيير إصدار الوحدة النمطية إلى إصدار مختلف أو تعيينه إلى مسار محلي. يمكن أن يكون هذا مفيدًا في المواقف التي تحتاج فيها إلى اختبار إصدارات معينة أو مشاريع متشعبة أو تغييرات محلية قبل الالتزام بمستودع بعيد. لاستخدام توجيه الاستبدال ، أضف السطر التالي إلى ملف go.mod
الخاص بك:
استبدل example.com/original/module v1.2.3 => example.com/new/module v1.4.0
يستبدل هذا الإصدار example.com/original/module
v1.2.3
بإصدار example.com/new/module
v1.4.0
. يمكنك أيضًا استبدال وحدة بمسار محلي:
استبدل example.com/original/module v1.2.3 => ../local/path/to/new/module
توجيه الاستبعاد
يمكنك استخدام توجيه exclude
لمنع استخدام إصدارات معينة من وحدة نمطية في مشروعك. يكون هذا مفيدًا عندما تعلم أن إصدارًا معينًا به مشكلات توافق أو ثغرات أمنية. لاستبعاد إصدار وحدة نمطية ، أضف السطر التالي إلى ملف go.mod
الخاص بك:
استبعد example.com/target/module v1.2.3
تذكر تشغيل go mod tidy
بعد تطبيق هذه التغييرات لتحديث ملف go.sum
وإعادة حساب شجرة التبعية.
وحدات Go الخاصة وإدارة المستودعات
يشبه العمل مع وحدات ومستودعات Go الخاصة العمل مع الوحدات العامة ، ولكن هناك بعض الخطوات الإضافية لضمان المصادقة والخصوصية المناسبين.
تكوين GOPRIVATE
لمنع تسريب مسارات الاستيراد إلى الخوادم العامة ، قم بتكوين متغير البيئة GOPRIVATE
. يحدد هذا المتغير قائمة مفصولة بفواصل لأنماط مسار الاستيراد للمستودعات الخاصة.
اذهب إلى env -w GOPRIVATE = example.com / private / path / *
استخدام رموز الوصول
لاستخدام المستودعات الخاصة ، تحتاج عادةً إلى المصادقة مع خدمة استضافة التعليمات البرمجية المصدر ، مثل GitHub أو GitLab. قم بإنشاء رمز وصول شخصي بأذونات مناسبة (مثل نطاق repo
لـ GitHub). ارجع إلى وثائق خدمة الاستضافة الخاصة بك لمعرفة الخطوات المحددة لإنشاء رمز وصول. بعد الحصول على رمز الوصول ، قم بتكوين متغير البيئة للمصادقة. استخدم متغير البيئة المناسب بناءً على خدمة VCS الخاصة بك.
تصدير GIT_TERMINAL_PROMPT = 0 تصدير GITHUB_TOKEN = YOUR_ACCESS_TOKEN
يسمح هذا لأمر go
بتنزيل المستودعات الخاصة والمصادقة عليها كوحدات Go Modules. إذا كنت تعمل مع خدمات VCS متعددة ، فيمكنك تكوين رموز وصول فردية لكل منها عن طريق تحديد متغيرات بيئة منفصلة حسب الحاجة.
الترحيل من أنظمة إدارة التبعية السابقة
قبل Go Modules ، كان هناك العديد من أنظمة إدارة التبعية مثل Dep أو glide أو حلول دليل البائعين المخصصة. إذا كنت لا تزال تستخدم هذه الأنظمة ، فقد حان الوقت للترحيل إلى Go Modules للبقاء محدثًا وجني فوائد إدارة تبعية Golang الحديثة. للترحيل من نظام إدارة تبعية سابق إلى Go Modules ، اتبع الخطوات التالية:
- قم بإنشاء نسخة احتياطية من مشروعك الأصلي للتأكد من أنه يمكنك العودة إلى الحالة السابقة إذا لزم الأمر.
- قم بإزالة أي ملفات إدارة التبعية الحالية (على سبيل المثال ،
Gopkg.toml
أوGopkg.lock
). - انتقل إلى جذر مشروعك في Terminal ، وقم بتشغيل
go mod init
لإنشاء ملفgo.mod
جديد. سيحاول هذا أيضًا تحويل ملف التبعية السابق ، إن وجد ، إلى إدخالات Go Modules. - قم بتشغيل
go mod tidy
لتعبئة ملفgo.mod
بالتبعيات من نظامك السابق. يضمن هذا الأمر أن الحزم الضرورية فقط هي جزء من شجرة التبعية. - في هذه المرحلة ، قد تحتاج إلى إجراء تعديلات على ملف
go.mod
الخاص بك لحل تعارضات التبعية أو لفرض إصدارات معينة. استخدم توجيهاتreplace
exclude
حسب الحاجة للتعامل مع هذه المشكلات. - تحقق من أن مشروعك لا يزال يبني الاختبارات ويجتازها كما هو متوقع.
باتباع هذه الخطوات ، يجب أن يعمل مشروعك الآن مع Go Modules ، مما يبسط إدارة التبعية ويجعلها أكثر قابلية للصيانة على المدى الطويل. يجب حل أي مشكلات عالقة عن طريق ضبط ملف go.mod
أو التحقق من مسارات الاستيراد للتأكد من أنها تتبع التنسيق الصحيح.
AppMaster: تسريع تطوير التطبيقات المستندة إلى Golang
يعد دمج Go Modules وأفضل ممارسات إدارة التبعية في سير العمل اليومي أمرًا حيويًا لضمان مشروع برمجي قابل للصيانة وقابل للتطوير يستند إلى Golang. ولكن ماذا لو كان بإمكانك تسريع عملية تطوير التطبيق بالكامل مع الاستمرار في الاستفادة من قوة Golang؟
أدخل AppMaster.io ، وهو نظام أساسي شامل بدون رمز مع التركيز على إنشاء تطبيقات خلفية تستند إلى Golang باستخدام بيئة تطوير مرئية. إلى جانب تطبيقات الواجهة الخلفية ، يسمح AppMaster بإنشاء تطبيقات الويب والجوال باستخدام نهج متكامل مصمم لتبسيط عملية التطوير.
باستخدام AppMaster ، يمكن للمستخدمين إنشاء نماذج بيانات (مخطط قاعدة البيانات) وتصميم عمليات الأعمال وتحديد REST API endpoints WebSocket من خلال واجهة مستخدم مرئية. يتم إنشاء تطبيقات الويب باستخدام واجهة السحب والإفلات جنبًا إلى جنب مع مصمم Web Business Process لتجربة مستخدم تفاعلية بالكامل. تم تصميم تطبيقات الهاتف المحمول بشكل مشابه ، مع مصمم عمليات الأعمال المتنقلة وإمكانية تصميم واجهة المستخدم.
تأخذ منصة AppMaster مخططاتك وتقوم بإنشاء كود المصدر لتطبيقاتك بمجرد الضغط على زر "نشر". يقوم بتجميع التطبيقات وتشغيل الاختبارات وحزمها في حاويات Docker (لتطبيقات الواجهة الخلفية) ونشر كل شيء على السحابة ، كل ذلك في غضون ثوانٍ.
يتم إنشاء تطبيقات الواجهة الخلفية باستخدام Golang (Go) ، والاستفادة من الأداء والبساطة وقابلية الصيانة التي توفرها Golang. يتم إنشاء تطبيقات الويب باستخدام إطار عمل Vue3 و JavaScript / TypeScript ، بينما تستخدم تطبيقات الأجهزة المحمولة إطار عمل AppMaster المستند إلى الخادم ، و Kotlin و Jetpack Compose لنظام Android ، و SwiftUI لتطبيقات iOS.
بفضل منصة AppMaster القوية ، حتى أولئك الذين ليس لديهم خبرة في البرمجة يمكنهم إنشاء حل برمجي كامل وقابل للتطوير يشمل الخلفيات الخلفية للخادم ومواقع الويب وبوابات العملاء وتطبيقات الهاتف المحمول الأصلية. لا يعمل AppMaster على تسريع عملية تطوير البرامج بالكامل فحسب ، بل يقضي أيضًا على الديون التقنية تمامًا عن طريق إنشاء تطبيقات من نقطة الصفر في كل مرة يتم فيها تعديل المتطلبات.
إذا كنت تفكر في اعتماد نظام no-code لتلبية احتياجات تطوير البرامج الخاصة بك ، خاصة تلك التي تستفيد من مزايا Golang ، فيجب أن يكون AppMaster على رأس قائمتك. قم بالتسجيل للحصول على حساب مجاني واستكشف مستقبل تطوير التطبيقات مع حل أسرع بـ 10 مرات و 3 مرات أكثر فعالية من حيث التكلفة.