استخدام Go (Golang)
نظرة عامة
Go، والذي يعرف باسم Golang، هي لغة برمجة قوية ذات نوعية ثابتة وصممت وفتحت من قبل Google. يفضلها المطورون بفضل بنيتها البسيطة، سرعة الترجمة العالية، إمكانيات التعامل المتوازي الفائقة (عبر goroutine الخفيفة وآلية channel للاتصال)، مع جمع قمامة (garbage collection) داخلي فعال. Go هي الخيار المثالي لبناء خدمات الشبكة عالية الأداء، الأنظمة الموزعة، المايكرو سيرفس، وأدوات سطر الأوامر، وأصبحت من اللغات الأساسية في تطوير التطبيقات السحابية والباك-إند الحديثة.
دعم ServBay للغة Go
يقدم ServBay، كبيئة تطوير ويب محلية متكاملة تدعم نظامي macOS وWindows، دعمًا غير مسبوق لمطوري لغة 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 عبر واجهة ServBay الرسومية سهل للغاية:
- افتح تطبيق ServBay.
- من شريط التنقل الأيسر، اختر "الحزم".
- من قائمة الحزم، ابحث عن قسم "Go".
- اضغط على "Go" لرؤية جميع الإصدارات المتاحة للتثبيت.
- اختر الإصدار الذي تريده (يفضل اختيار أحدث إصدار مستقر مثل Go 1.24)، ثم اضغط على زر "تثبيت" بجانبه.
- سيقوم ServBay تلقائيًا بتحميل وتثبيت النسخة المطلوبة من Go. يعتمد وقت التثبيت على سرعة اتصالك بالإنترنت.

بعد الانتهاء، سيظهر أن النسخة أصبحت مثبتة. يمكنك تثبيت عدة نسخ أو التبديل بينها حسب الحاجة.
استخدام Go
بمجرد تثبيت Go بنجاح، تستطيع مباشرة استخدام أدوات go من الطرفية.
للتحقق من تثبيت Go وعرض النسخة الحالية الفعالة، نفذ الأمر التالي:
bash
go version1
ينبغي أن ترى نتيجة مشابهة للمثال أدناه، حيث تظهر نسخة Go التي يديرها ServBay حاليًا:
go version go1.24.1 darwin/arm641
بناء وتشغيل تطبيق Go Web بسيط
لنقم الآن بإنشاء مثال بسيط لخادم HTTP بلغة Go، ثم نقوم بترجمته وتشغيله من بيئة ServBay.
إنشاء مجلد المشروع: يُفضل إنشاء مجلد جديد في المسار الافتراضي لمواقع 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 mod initلتهيئة الـ 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، ويرد بتعليمات تتضمن "Hello from Go on ServBay!" واسم الجهاز ومسار الطلب.
تشغيل التطبيق: تأكد أنك داخل مجلد مشروعك في طرفية 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) وتهيئة عكس البروكسي عبر خوادم ServBay (Caddy أو Apache أو Nginx). هذا يُسهل تجربة العمل وكأنك في الإنتاج، عبر المنافذ القياسية، ويُمكِّنك من الاستفادة من ميزات ServBay الأخرى (كمثال: HTTPS تلقائيًا، وربط خدمات أخرى).
- إنشاء موقع عبر ServBay:
- افتح واجهة ServBay وانتقل إلى قسم "المواقع".
- اضغط زر "إضافة موقع".
- النطاق: أدخل اسم النطاق المحلي المطلوب مثل
go-app.servbay.demo. - نوع الموقع: اختر عكس البروكسي.
- عنوان IP: أدخل
127.0.0.1. - المنفذ: أدخل
8080.

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

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

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