Go (المعروفة أيضاً باسم Golang) هي لغة برمجة مفتوحة المصدر ومكتوبة بشكل ثابت (statically typed). تم تطويرها في الأصل بواسطة Google. وتشمل بعض الميزات البارزة للغة Go البساطة، والأداء العالي، وسهولة القراءة، والكفاءة.
مثل أي لغة برمجة بارزة أخرى، تقدم المكتبة القياسية للغة Go مجموعة غنية من الحزم. ومع ذلك، يمكننا أيضاً توسيع الوظائف من خلال دمج حزم الطرف الثالث. سيقوم هذا الدليل بـ توضيح كيفية استيراد الحزم ودمجها في مشاريع Go الخاصة بك.
المتطلبات الأساسية
لمتابعة هذا الدليل، ستحتاج إلى إعداد المكونات التالية تحت تصرفك:
- خادم Ubuntu مهيأ بشكل صحيح. تعرف على المزيد حول تهيئة خادم Ubuntu الخاص بك على CloudSigma.
- بيئة برمجة Go. يمكنك استخدام هذا الدليل حول تثبيت Go على Ubuntu.
- محرر نصوص حديث، على سبيل المثال، Vim, Sublime Text, Atom, Visual Studio Code, Brackets، إلخ. سيتضمن هذا الدليل Visual Studio Code .
الخطوة 1 – تثبيت Go
لقد ناقشنا بالفعل تثبيت لغة برمجة Go الأساسية على Ubuntu 20.04. ومع ذلك، هناك طريقة بديلة أسهل: g (مدير إصدارات Go خفيف الوزن).
السبب في أننا سنستخدم g هو أن أيًا من إصدارات Go المتاحة من مستودعات حزم Ubuntu أو snap لا تحتوي على أحدث إصدار متاح من Go (v1.18 في وقت كتابة هذا الدليل). يوصى دائماً باستخدام أحدث إصدار متاح من أي حزمة لغة برمجة.
سيقوم الأمر التالي بتشغيل g برنامج نصي للتثبيت:
|
1 |
wget -qO- https://git.io/g-install | sh -s |


لتطبيق التغييرات، يجب عليك إعادة تشغيل جلسة shell. بعد إعادة التشغيل، تحقق من التثبيت:
|
1 |
go version |
|
1 |
which go |

بعد تثبيت Go، يوصى أيضاً بتثبيت gopls . وهو خادم لغة Go الرسمي. وهو متوافق مع العديد من محرري النصوص مثل VS Code و Vim و Emacs و Sublime Text و Atom وغيرها الكثير. قم بتشغيل الأمر التالي:
|
1 |
go install golang.org/x/tools/gopls@latest |
بيئة برمجة Go الخاصة بنا جاهزة الآن.
الخطوة 2 – إنشاء برنامج نصي تجريبي لـ Go
جميع الأكواد الموضحة في هذا الدليل ستناسب برنامجًا نصيًا واحدًا لـ Go. قم بإنشاء برنامج نصي تجريبي لـ Go:
|
1 |
touch practice.go |
بعد إجراء التغييرات على البرنامج النصي، يمكننا تشغيله باستخدام أمر Go التالي:
|
1 |
go run practice.go |
هنا، سيقوم مترجم Go بتشغيل الكود في وضع المفسر.
الخطوة 3 – استخدام حزم المكتبة القياسية
تأتي Go مع مجموعة ضخمة في مكتبتها القياسية. وهي تتكون من حزم عديدة، على سبيل المثال:
- fmt: ينفذ عمليات الإدخال/الإخراج المنسقة مع وظائف مماثلة لـ C ( printf و scanf ).
- http: توفر هذه الحزمة وظائف لإنشاء خدمات الويب، وإرسال واسترداد البيانات عبر بروتوكول http ، إلخ.
لدمج أي حزمة في مشروع Go، يجب تنفيذها باستخدام عبارة import . يتم الإعلان عن العبارة بواسطة الكلمة الرئيسية import جنباً إلى جنب مع أسماء الحزم. على سبيل المثال، لاستيراد math/rand ، ستبدو عبارة الاستيراد كالتالي:
|
1 |
import "math/rand" |
يقوم الكود التالي بتنفيذ وظائف مختلفة من حزمة math/rand :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package main import "math/rand" func main() { for i := 0; i < 10; i++ { println(rand.Intn(25)) } } |
يوضح هذا الكود حلقة تكرار (for loop) بسيطة تطبع 10 أعداد صحيحة عشوائية (من 0 إلى 24) على الشاشة. هنا:
- rand.Int() : يعيد استدعاء هذه الدالة عدداً صحيحاً عشوائياً.
- rand.Intn() : تعمل بشكل مشابه لـ rand.Int() ولكنها تقبل معاملاً يحدد نطاق الأعداد الصحيحة العشوائية (من 0 إلى الرقم المحدد).
بعد ذلك، قم بتشغيل الكود:
|
1 |
go run practice.go |
سيبدو الناتج كالتالي:

لاحظ أن الناتج سيكون هو نفسه تماماً لأن قيمة البذرة (seed) لمولد الأرقام العشوائية هي قيمة ثابتة افتراضياً. هذه هي طبيعة مولد الأرقام العشوائية الزائفة. يمكنك معرفة المزيد عن البذرة العشوائية هنا.
الخطوة 4 – استيراد حزم متعددة
تحتاج المشاريع الأكبر والأكثر تعقيدًا إلى دمج حزم متعددة. كيف تستوردها في كود Go الخاص بك؟ أحد الخيارات الصالحة هو استخدام عبارات استيراد فردية لكل حزمة مستوردة. ومع ذلك، فإن هذا النهج غير فعال مقارنة ببنية الاستيراد التالية:
|
1 2 3 4 5 6 7 8 9 |
import ( "<package_1>" "<package_2>" "<package_3>" ) |
هنا، تتضمن عبارة استيراد واحدة حزمًا متعددة في نفس الوقت. يقلل هذا من كمية الكود اللازم كتابتها مع تحسين قابلية القراءة.
يضع الكود التالي هذه الميزة قيد التنفيذ:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import ( "fmt" "math/rand" ) func main() { for i := 0; i < 10; i++ { fmt.Printf("%d) %d\n", i, rand.Intn(25)) } } |
قم بتشغيل الكود:
|
1 |
go run practice.go |
سيبدو المخرج شيئًا كهذا:

الخطوة 5 – تثبيت مكتبات Go الإضافية
تأتي المكتبة القياسية لـ Go مع العديد من الحزم المفيدة. وهي مصممة لتكون عامة الأغراض. وهي تمكن المطورين من إنشاء حزمهم الخاصة فوق المكتبة القياسية لتلبية احتياجاتهم الخاصة. تحقق من قاعدة بيانات حزم Go الرسمية.
ماذا لو كنت بحاجة إلى استخدام حزمة Go من طرف ثالث؟ تأتي Go مع go install أمر ( go get مهمل). يمكنه جلب أي حزمة Go من طرف ثالث من الإنترنت.
للتوضيح، سنقوم بتثبيت حزمة cobra-cli . سيقوم أمر Go التالي بتنزيل وتثبيت الملفات اللازمة ودمج الحزمة في نظام مكتبة Go:
|
1 |
go install github.com/spf13/cobra-cli@latest |

يجب أن يكون الملف الثنائي لـ cobra-cli موجودًا في الموقع التالي:
|
1 |
ls -l $GOPATH/bin |

يجب أن تقع ملفات الحزمة الأخرى في الموقع التالي:
|
1 |
ls -l $GOPATH/pkg/mod/github.com/spf13 |

بدءًا من إصدار Go v1.11، تحدد وحدات Go إصدار الحزمة التي ترغب في استيرادها. تم شرح ذلك بالتفصيل هنا: Go Modules GitHub.
الخطوة 6 – أسماء مستعارة للحزم
في مواقف مختلفة، قد تجد أسماء حزم متعارضة بين الحزم المحلية والمستوردة. هذا هو المكان الذي يمكن أن يحل فيه استخدام الأسماء المستعارة هذا التعارض. تبدو بنية الاسم المستعار شيئًا كهذا:
|
1 |
import <alias> "import_package_name" |
دعنا نعدل برنامج Go البسيط الخاص بنا لدمج fmt_alias كاسم مستعار للحزمة fmt :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import ( fmt_alias "fmt" "math/rand" ) func main() { for i := 0; i < 10; i++ { fmt_alias.Printf("%d) %d\n", i, rand.Intn(25)) } } |
لاحظ أنه بدلاً من استخدام fmt.Printf() ، فإننا نستخدم الاسم المستعار للحزمة fmt_alias.Printf() .
ومع ذلك، فإن Go لا ترحب كثيرًا بالأسماء المستعارة. عندما تستخدم أسماء مستعارة لتجنب تعارض أسماء الاستيراد، يوصى بإنشاء اسم مستعار للاستيراد الأكثر محلية أو الخاص بالمشروع. على سبيل المثال، إذا كنت تريد الحصول على حزمة محلية strings وحزمة نظام strings ، فيجب عليك إنشاء اسم مستعار للحزمة المحلية، وليس لحزمة النظام.
أفضل ممارسة هي تجنب تعارض الأسماء في المقام الأول.
الخطوة 7 – تنسيق الاستيراد
لقد تعلمنا الإعلان عن جميع عمليات الاستيراد باستخدام عبارة import واحدة. ماذا لو كان لديك عدة عمليات استيراد؟ على سبيل المثال:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import ( "fmt" "os" "github.com/example/foo" "github.com/example/bar" "math/rand" "github.com/abc/pqr/xyz" ) |
يقوم تنسيق الاستيراد بفرز الحزم بترتيب معين، مما يحسن اتساق الكود. ونظراً لأنه يفرز ترتيب عمليات الاستيراد فقط، فإنه يمنع أيضاً عمليات الالتزام (commits) العشوائية. كما أنه يمنع التغييرات غير الضرورية في الكود ومراجعات الكود المربكة.
ستقوم معظم المحررات الحديثة بتنسيق عمليات الاستيراد لك تلقائياً. وبدلاً من ذلك، فإنها ستدعم goimports. من الممارسات الشائعة في هذا المجال استخدام goimports بدلاً من فرز عمليات الاستيراد يدوياً. بالإضافة إلى ذلك، goimports يعكس أيضاً تغييرات التنسيق في الكود.
إليك كيف قد تبدو كتلة import بعد تطبيق goimports :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import ( fmt_alias "fmt" "math/rand" "os" "github.com/example/foo" "github.com/example/bar" "github.com/abc/pqr/xyz" ) |
هل تلاحظ أي نمط؟
- يتم تجميع جميع المكتبات القياسية أولاً.
- يتم فصل المجموعات بأسطر فارغة، مما يحسن من سهولة قراءة الكود.
أفكار نهائية
تعد عمليات الاستيراد في Go ميزة قوية تتيح استدعاء وظائف غير مدمجة في Go. بينما توفر المكتبة القياسية العديد من الحزم العامة، تدعم Go أيضاً حزم الطرف الثالث. يوضح هذا الدليل كيفية استيراد حزم Go المدمجة وحزم الطرف الثالث.
في هذا الدليل، قمنا بتشغيل برامج Go الخاصة بنا باستخدام المفسر. ومع ذلك، يمكنك تجميع الأكواد في ملفات ثنائية مستقلة للحصول على أداء أفضل. يمكنك معرفة المزيد حول تجميع برامج Go هنا. إذا كنت تريد معرفة كيفية نشر تطبيق ويب Go باستخدام Nginx، فراجع هذا البرنامج التعليمي. بالإضافة إلى ذلك، يمكنك إلقاء نظرة على دليلنا الذي يعرض كيفية كتابة حزم Go الخاصة بك.
هل أنت مطور Go؟ تقدم CloudSigma دعماً لواجهة برمجة تطبيقات Go للتكامل السلس مع مشاريعك.
حوسبة سعيدة!
التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.