استخدام Go (Golang)
نظرة عامة
لغة Go (وتعرف أيضاً بـ Golang) هي لغة برمجة ثابتة النوع ومترجمة ومفتوحة المصدر صممتها شركة Google. تتميز ببنيتها البسيطة، وسرعة الترجمة العالية، وكفاءة معالجة التزامن من خلال ميزة الـ goroutine وقنوات الاتصال channel، وأداء فعال في جمع القمامة (garbage collection). تحظى Go بشعبية بين المطورين لبناء خدمات شبكية عالية الأداء، أنظمة موزّعة، تطبيقات صغيرة (microservices)، وأدوات خطوط أوامر. وقد أصبحت من الخيارات الرئيسية لتطوير التطبيقات السحابية الحديثة في جانب الخادم (backend).
دعم ServBay للغة Go
يقدم ServBay—وهو بيئة تطوير ويب محلية متكاملة مصممة خصيصاً لنظام macOS—دعماً قوياً ومرناً لمطوري لغة Go. باستخدام ServBay يمكنك تثبيت وإدارة والتحويل بين عدة إصدارات Go بسهولة وبدون الحاجة للإعدادات اليدوية المعقدة (مثل متغيرات البيئة GOROOT وGOPATH)، مما يبسط عملية ضبط وصيانة بيئة تطوير Go بشكل كبير.
يوفر ServBay مجموعة كاملة من أدوات Go ويدعم مجموعة واسعة من الإصدارات، من الإصدارات السابقة حتى الأحدث، لتغطية جميع احتياجات مشاريعك:
- Go 1.11
- Go 1.12
- Go 1.13
- Go 1.14
- Go 1.15
- Go 1.16
- Go 1.17
- Go 1.18
- Go 1.19
- Go 1.20
- Go 1.21
- Go 1.22
- Go 1.23
- Go 1.24 (وأي إصدارات أحدث يدعمها ServBay في المستقبل)
دعم Go Modules
بيئة ServBay مفعّلة افتراضيًا وتوصي باستخدام Go Modules لإدارة الاعتمادات البرمجية، وهو الحل الرسمي المعتمد منذ Go 1.11. داخل طرفية ServBay يمكنك استخدام أوامر go mod مثل (go mod init, go get, go mod tidy) دون القلق من إعدادات $GOPATH التقليدية.
المتطلبات الأساسية
- يجب أن يكون ServBay مثبت ومشغل بنجاح على نظام macOS.
- لديك معرفة أساسية بلغة Go.
- اعتدت على استخدام أوامر الطرفية (Terminal).
تثبيت Go
يمكنك تثبيت بيئة Go البرمجية بكل سهولة عبر واجهة المستخدم الرسومية (GUI) الخاصة بـ ServBay:
- شغّل تطبيق ServBay.
- من شريط التنقل الأيسر اختر
الحزم. - ضمن قائمة الحزم، ابحث عن قسم
Go. - انقر على
Goلعرض جميع الإصدارات المتوفرة. - اختر الإصدار المراد تثبيته (عادةً يوصى بأحدث إصدار مستقر مثل Go 1.24). اضغط زر
تثبيتبجوار الإصدار المطلوب. - سيقوم ServBay بتنزيل وتثبيت نسخة Go المحددة تلقائيًا. مدة التنزيل تعتمد على سرعة الاتصال بالإنترنت.

بعد اكتمال التثبيت، ستلاحظ أن حالة الإصدار أصبحت "مثبّت"، ويمكنك إضافة أو تبديل إصدارات أخرى حسب الحاجة.
استخدام Go
بعد تثبيت Go بنجاح يمكنك استخدام جميع أوامره عبر الطرفية في نظام التشغيل مباشرةً.
للتحقق من أن Go تم تثبيته بنجاح ومعرفة الإصدار النشط حاليًا، نفذ الأمر التالي:
go versionستظهر رسالة مشابهة تبين الإصدار المُدار حالياً بواسطة ServBay:
go version go1.24.1 darwin/arm64بناء وتشغيل تطبيق Go Web بسيط
سنقوم الآن بإنشاء مثال بسيط لخادم HTTP باستخدام Go، وتجربته في بيئة ServBay.
إنشاء مجلد المشروع: يفضل إنشاء مجلد لمشروع Go في المسار الجذري لمواقع ServBay
/Applications/ServBay/www. مثلاً سننشئ مجلدgo-servbay-demo.bashcd /Applications/ServBay/www mkdir go-servbay-demo cd go-servbay-demo1
2
3تهيئة Go Modules: من جذر المشروع (
go-servbay-demo)، فعّل Go Modules عبر الأمر التالي لتحديد هوية الوحدة البرمجية (عادة يستخدم اسم المجلد هنا كمثال):bashgo mod init go-servbay-demo1سينتج عن هذا الأمر ملف
go.modفي الدليل الحالي لإدارة التبعيات الخاصة بالمشروع.كتابة كود Go: أنشئ ملف باسم
main.goوالصق فيه الشيفرة التالية:gopackage main import ( "fmt" "log" "net/http" "os" ) func handler(w http.ResponseWriter, r *http.Request) { hostname, _ := os.Hostname() fmt.Fprintf(w, "Hello from Go on ServBay!\nHostname: %s\nPath: %s\n", hostname, r.URL.Path) } func main() { http.HandleFunc("/", handler) port := "8080" // تعريف منفذ الاستماع للخدمة log.Printf("Go web server starting on port %s...", port) log.Printf("Access it at http://localhost:%s", port) // تشغيل خادم HTTP err := http.ListenAndServe(":"+port, nil) if err != nil { log.Fatalf("Error starting server: %s\n", err) } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27هذا المثال يقوم بتشغيل خادم HTTP محلي على المنفذ 8080، وعند أي طلب يُرسل رسالة ترحيب مع اسم الجهاز ومسار الطلب.
تشغيل تطبيق Go: ونتأكد أنك لا تزال في مجلد المشروع طرفية ServBay (
/Applications/ServBay/www/go-servbay-demo) ثم نفّذ:bashgo run main.go1إذا تم التشغيل بنجاح ستظهر رسائل في الطرفية تشير إلى أن الخادم بدأ العمل:
2024/05/20 15:00:00 Go web server starting on port 8080... 2024/05/20 15:00:00 Access it at http://localhost:80801
2زيارة التطبيق: افتح متصفح الويب واذهب إلى
http://localhost:8080وستشاهد استجابة شبيهة بـ: "Hello from Go on ServBay! Hostname: your-mac-hostname Path: /".
استخدام إعدادات الموقع في ServBay (الوكيل العكسي) – موصى به
مع أنك تستطيع الوصول للتطبيق مباشرة عبر localhost:8080، إلا أنه في سياق التطوير المحلي من الأفضل استخدام اسم نطاق مخصص مثل go-app.servbay.demo، وتهيئة خادم الويب (Caddy أو Apache أو Nginx) كوكيل عكسي عبر ServBay. هكذا تصبح تجربة التطوير أقرب للإنتاج وتستفيد من مزايا ServBay المتقدمة (مثل HTTPS التلقائي والتكامل مع الخدمات الأخرى).
- إنشاء موقع جديد في ServBay:
- افتح واجهة ServBay وانتقل إلى قسم
المواقع. - اضغط على زر
إضافة موقع. - اسم النطاق: أدخل اسم نطاق للتطوير المحلي مثلاً
go-app.servbay.demo. - نوع الموقع: اختر "وكيل عكسي".
- عنوان IP: أدخل
127.0.0.1. - المنفذ: أدخل
8080.
- افتح واجهة ServBay وانتقل إلى قسم

حفظ وإعادة تحميل الإعدادات: بعد الحفظ من واجهة ServBay، تأكد من إعادة تشغيل أو إعادة تحميل خادم الويب (Caddy أو Nginx) لتفعيل الإعدادات الجديدة.
زيارة التطبيق عبر نطاق مخصص: الآن أصبح بإمكانك زيارة تطبيقك عبر الرابط
https://go-app.servbay.demoمن متصفحك. سيقوم خادم الويب بتحويل الطلبات تلقائياً إلى برنامج Go لديك.

إدارة إصدارات Go
يتيح لك ServBay تبديل الإصدارات المثبتة من Go بسهولة بالغة.
- التبديل بين الإصدارات: من واجهة ServBay اذهب إلى
الحزم>Goوسترى جميع الإصدارات المثبتة. من قائمة "الإعدادات" يمكنك تعيين أي إصدار تريده كإصدار افتراضي. - التحقق: بعد التبديل، افتح طرفية جديدة ونفّذ
go versionللتأكد أن التبديل تم بنجاح.
إدارة إصدار Go الخاص بكل مشروع عبر .servbay.config
بالإضافة للتبديل العالمي لإصدار Go، يدعم ServBay تعيين إصدار مختلف لكل مشروع عبر ملف .servbay.config في مجلد المشروع الجذري.
كيف يعمل ذلك:
عند الدخول عبر طرفية ServBay لمجلد يحتوي على .servbay.config، يقوم ServBay بقراءة هذا الملف تلقائياً وتعديل بيئة الطرفية بحيث تشير الأوامر (go) إلى الإصدار المحدد بـ GO_VERSION داخل الملف.
صيغة ملف الإعداد:
.servbay.config هو ملف نصي بسيط على هيئة مفاتيح وقيم. لإسناد إصدار Go لمشروعك أضف السطر التالي:
# مثال على ملف .servbay.config
# يحدد أن المشروع يستخدم Go 1.22
GO_VERSION=1.22
# ويمكنك أيضاً تحديد إصدارات أدوات أخرى
# PHP_VERSION=8.3
# NODE_VERSION=20
# PYTHON_VERSION=3.11
# ... إعدادات إضافية ...
# GOPROXY=https://goproxy.cn,direct2
3
4
5
6
7
8
9
10
الفوائد:
- تبديل تلقائي للإصدار: لست بحاجة لتغيير الإصدار عالمياً؛ ما عليك إلا الدخول لمجلد المشروع وسيختار النظام الإصدار الصحيح.
- عزل بيئة المشروع: يضمن أن كل مشروع يعمل في بيئة Go المرغوبة بدون تعارضات.
- دعم التعاون: عند مشاركة الملف على أنظمة إدارة النسخ مثل Git يحصل جميع أعضاء الفريق على نفس إعدادات الإصدار تلقائياً بعد نسخ المشروع.
سيناريو عملي:
افترض أن لديك مشروعين:
project-aيحتاج Go 1.12project-bيحتاج Go 1.22 الأحدث
في كل مجلد مشروع، قم بإنشاء ملف .servbay.config المناسب:
/Applications/ServBay/www/project-a/.servbay.config:iniGO_VERSION=1.121/Applications/ServBay/www/project-b/.servbay.config:iniGO_VERSION=1.221
عندما تدخل (cd) إلى /Applications/ServBay/www/project-a وستنفذ go version ستظهر لك Go 1.12.x، وعندما تدخل cd /Applications/ServBay/www/project-b وترى نتيجة الإصدار ستجد Go 1.22.x.

ملاحظة: يؤثر ملف .servbay.config فقط على إصدار Go الأساسي داخل ServBay، أما إدارة تبعيات المشروع نفسها فيُنصح بها عبر Go Modules (go.mod).
الأسئلة الشائعة (FAQ)
س: تظهر رسالة "command not found" عند تشغيل أمر go في طرفية ServBay؟
ج: تحقق أولاً من إعداد متغير البيئة PATH في الطرفية. ثم تأكد من تثبيت إصدار واحد على الأقل من Go عبر واجهة ServBay وتعيينه كإصدار افتراضي نشط.
س: كيف أحدث إصدار Go عبر ServBay؟
ج: راقب قسم الحزم > Go بانتظام عبر الواجهة. عند توفر إصدار جديد ستجده بالقائمة ويمكنك تثبيته بضغطة زر. بعد إكمال التثبيت، قم بتعيين الإصدار الجديد افتراضيًا وابدأ في استخدامه فورًا.
س: أواجه بطء أو مشاكل تحميل التبعيات عند استخدام Go Modules؟
ج: بشكل افتراضي يعتمد Go Modules على
proxy.golang.org. إذا كنت في الصين أو في مناطق بها قيود على الإنترنت قد تظهر مشاكل في الوصول أو البطء. يمكنك تعديل متغير البيئةGOPROXYلتستخدم مرآة سريعة مثلhttps://goproxy.cnأوhttps://goproxy.io، وذلك من إعدادات ServBay العامة أو من ملف.servbay.configالخاص بالمشروع (كما فيGOPROXY=https://goproxy.cn,direct).س: عند تشغيل تطبيق الويب Go تظهر رسالة أن المنفذ مستخدم (address already in use)، ماذا أفعل؟
ج: يعني الخطأ أن منفذ التطبيق (مثل 8080) مشغول بالفعل من قبل عملية أخرى. إما أن تغيّر المنفذ في كود Go إلى قيمة أخرى غير مستخدمة (مثلاً 8081 أو 9000)، أو ابحث عن العملية التي تشغل المنفذ ثم أوقفها. على macOS استعمل الأمر
lsof -i :<رقم_المنفذ>لاستخراج PID الخاص بالعملية ثم استخدمkill <PID>لإيقافها.س: ما الفرق بين ملف
.servbay.configوميزة التبديل العالمي لإصدارات Go؟ وأيهما أستخدم؟ج: التبديل العالمي (من واجهة ServBay) يغير إصدار Go الافتراضي لجميع المشاريع والنظام. أما
.servbay.configفيمنحك تحكمًا دقيقًا لكل مشروع على حدة داخل الطرفية. نوصي باستخدام.servbay.configلإدارة احتياجات الإصدارات على مستوى المشروع، خاصة إذا كنت تعمل على عدة مشاريع تتطلب إصدارات مختلفة. أما التبديل العالمي فهو مناسب لتعيين إصدار افتراضي عام.
ملخص
يوفر لك ServBay بيئة مثالية وفعالة لتطوير مشاريع Go (Golang) على نظام macOS. بفضل واجهته الرسومية البسيطة يمكنك تثبيت وإدارة عدة إصدارات بسهولة، واستعمال .servbay.config للتحكم في الإصدار الخاص بكل مشروع على حدة. وبالاستفادة من Go Modules في إدارة التبعيات، وخوادم الويب المدمجة لتشغيل الوكيل العكسي واستضافة التطبيقات، يمكنك بناء واختبار ونشر تطبيقات Go بسرعة وسهولة. يختصر ServBay عليك عناء إعداد البيئة، لتتفرغ للإبداع في كتابة كود Go وتطوير مشاريعك بثقة.
