ميكروسيرفيسات بلغة Go: من أين تبدأ ولا تتوقف

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا Go هو الخيار الأفضل للميكروسيرفيسات (ومتى لا يكون كذلك)



تخيل أنك تبني مركزًا تجاريًا. بدلاً من تشييد مبنى عملاق واحد، تقوم ببناء أجنحة منفصلة: مقهى، مكتبة، بقالة. كل منها يعمل بشكل مستقل، لكنها معًا تشكل مجمعًا متكاملًا. تعطل المصعد في مكان ما؟ المكتبة تستمر في العمل. نفدت الأكواب في المقهى؟ نغلق المقهى فقط، وليس المجمع بأكمله.



هذه هي بنية الميكروسيرفيسات. و Go (Golang) هي المادة المثالية لبناء مثل هذه "الأجنحة". لماذا؟



  • بداية سريعة: الترجمة إلى ملف ثنائي واحد. لا حاجة لـ JDK أو آلات افتراضية أو node_modules.
  • الأداء: Go تعمل بمستوى C++، لكن كتابتها تشبه Python.
  • التزامن المدمج: الغوروتينات (goroutines) والقنوات (channels) هي القوة الخارقة لمعالجة مئات الطلبات في الثانية.
  • البساطة: Go محدودة عن قصد. لا يوجد جينيريكس (حتى Go 1.18 لم تكن موجودة)، ولا يوجد توريث. الكود يُقرأ وكأنه دليل استخدام مكنسة كهربائية - من الواضح فورًا ما يفعله كل سطر.


لكن هناك أيضًا عيوب. Go لن تكون مناسبة إذا كنت بحاجة إلى:

  • توريث ثقيل للفئات (غير موجود هنا إطلاقًا).
  • عدد هائل من المكتبات الجاهزة لأي مهمة (النظام البيئي أفقر من Java أو Python).
  • الكتابة الديناميكية (Go كتابة ثابتة، ستحتاج لكتابة كود هيكلي أكثر).



إذا كان مشروعك هو API عالي التحميل، أو باك إند للدردشة، أو بوابة دفع، أو نظام مراقبة - فإن Go هي اختيارك. إذا كنت تكتب نموذجًا أوليًا في عطلة نهاية الأسبوع ولا تهتم بالسرعة - استخدم Python.



المرحلة 1. حزم الحقيبة: الأدوات وهيكل المشروع



ما تحتاج لتثبيته

قبل كتابة الكود، دعنا نهيئ البيئة. ستحتاج إلى:

  • Go (الإصدار 1.21+). قم بالتحميل من go.dev.
  • Docker (للحاويات).
  • curl أو Postman (لاختبار API).
  • أي IDE: GoLand, VS Code مع إضافة Go, Vim. أنصح بـ VS Code - مجاني ومريح.


هيكل المجلدات الصحيح

دعنا نتفق فورًا: لا مجال للفوضى. إليك الهيكل القياسي لميكروسيرفيس بلغة Go:



/user-service├── cmd/│   └── server/│       └── main.go        # نقطة الدخول├── internal/│   ├── handler/           # معالجات HTTP│   ├── service/           # منطق الأعمال│   ├── repository/        # التعامل مع قاعدة البيانات│   └── model/             # هياكل البيانات├── pkg/│   └── middleware/        # أدوات مساعدة عامة├── Dockerfile├── go.mod└── go.sum


لماذا هذا الترتيب؟ Go هي لغة حيث يفرض هيكل المجلدات البنية. cmd/ هي نقطة الدخول. internal/ هو كل ما لا يمكن استيراده من الخارج (حماية من الأخطاء). pkg/ هو ما يمكن مشاركته مع الخدمات الأخرى.



المرحلة 2. كتابة أول ميكروسيرفيس: Hello, World! 2.0



لنكتب خادم HTTP بسيط بلغة Go يعيد JSON. سيكون هذا "ميكروسيرفيس التحيات" الخاص بنا.



الخطوة 1. تهيئة الوحدة

mkdir hello-servicecd hello-servicego mod init github.com/username/hello-service


الخطوة 2. كتابة main.go

package main

import ( "encoding/json" "log" "net/http" "time")

// GreetingResponse — هيكل الاستجابةtype GreetingResponse struct { Message string `json:"message"` Timestamp string `json:"timestamp"`}

func greetHandler(w http.ResponseWriter, r *http.Request) { // تعيين الترويسات w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK)

// إنشاء الاستجابة response := GreetingResponse{ Message: "مرحبًا، ميكروسيرفيسات!",

المدونات

توصيات الكتب