من الصفر إلى مبتدئ: 5 مشاريع بلغة Go ستفجر محفظتك

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

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

ابدأ الدورة

لماذا Go هي تذكرتك الذهبية إلى عالم الخلفية

\n

إذا كنت تقرأ هذا، فأنت بالتأكيد تعلم بالفعل أن Go (Golang) ليست مجرد لغة عصرية أخرى. إنها اللغة التي كُتبت بها Docker و Kubernetes و Prometheus ونصف البنية التحتية للإنترنت الحديث. لكن هل تعرف ما يميز المطور المتميز عن المبتدئ؟ ليس معرفة القواعد النحوية، بل المشاريع الحقيقية للمحفظة بلغة Go.

\n

لقد سئم أصحاب العمل من "قوائم المهام" النمطية بلغة React. إنهم بحاجة إلى أشخاص يفهمون الـ Goroutines، ويعرفون كيفية تصميم API، ولا يخافون من العمل مع الشبكة. في هذه المقالة، لن نقوم فقط بسرد الأفكار - بل سنحلل 5 مشاريع مع أجزاء كود حقيقية ستغطي 90% من أسئلة المقابلة. هيا بنا!

\n\n

المشروع رقم 1: RESTful API لتقصير الروابط (URL Shortener)

\n

لماذا هذا مهم؟

\n

هذا كلاسيكي من نوعه. يجب أن يكون أي مطور خلفية قادرًا على رفع خادم HTTP، والعمل مع الـ middleware والتوجيه. مشروع "مُقصّر الروابط" يتناسب تمامًا مع مشاريع Golang للمحفظة، حيث يسمح بإظهار فهم الهياكل والتجزئة والعمل مع قواعد البيانات.

\n\n

ماذا سنكتب؟

\n

سننشئ خادمًا بسيطًا باستخدام net/http (بدون مكتبات خارجية لإظهار معرفتنا بالمكتبة القياسية). سيقبل الخادم رابطًا طويلًا ويعيد كودًا قصيرًا (على سبيل المثال، /abc123).

\n\n
package main\n\nimport (\n    "crypto/rand"\n    "encoding/hex"\n    "encoding/json"\n    "fmt"\n    "net/http"\n    "sync"\n)\n\ntype URLStore struct {\n    mu   sync.RWMutex\n    data map[string]string\n}\n\nvar store = URLStore{data: make(map[string]string)}\n\nfunc generateShortID() string {\n    bytes := make([]byte, 4)\n    rand.Read(bytes)\n    return hex.EncodeToString(bytes)\n}\n\nfunc shortenHandler(w http.ResponseWriter, r *http.Request) {\n    if r.Method != http.MethodPost {\n        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)\n        return\n    }\n\n    var req struct {\n        URL string `json:"url"`\n    }\n    if err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n        http.Error(w, "Bad request", http.StatusBadRequest)\n        return\n    }\n\n    shortID := generateShortID()\n    store.mu.Lock()\n    store.data[shortID] = req.URL\n    store.mu.Unlock()\n\n    w.Header().Set("Content-Type", "application/json")\n    json.NewEncoder(w).Encode(map[string]string{\n        "short_url": fmt.Sprintf("http://localhost:8080/%s", shortID),\n    })\n}\n\nfunc redirectHandler(w http.ResponseWriter, r *http.Request) {\n    shortID := r.URL.Path[1:]\n    store.mu.RLock()\n    originalURL, ok := store.data[shortID]\n    store.mu.RUnlock()\n\n    if !ok {\n        http.NotFound(w, r)\n        return\n    }\n    http.Redirect(w, r, originalURL, http.StatusFound)\n}\n\nfunc main() {\n    http.HandleFunc("/shorten", shortenHandler)\n    http.HandleFunc("/", redirectHandler)\n    fmt.Println("Server started at :8080")\n    http.ListenAndServe(":8080", nil)\n}
\n\n

ماذا ستطور؟

\n
    \n
  • العمل مع sync.RWMutex للوصول المتزامن
  • \n
  • تسلسل JSON
  • \n
  • هندسة نظيفة بدون أطر عمل
  • \n
\n

هذا المشروع للمحفظة بلغة Go سيظهر أنك تفهم كيف تعمل الأشياء "تحت الغطاء".

\n\n

المشروع رقم 2: أداة CLI لمراقبة النظام

\n

لماذا هذا في المحفظة؟

\n

تشتهر Go بأدواتها الطرفية. كتابة top أو htop خاص بك هي طريقة ممتازة لإظهار العمل مع استدعاءات النظام والـ Goroutines. هذا واحد من أكثر المشاريع المفيدة للمحفظة بلغة Go، لأنه قريب من مهام DevOps الحقيقية.

\n\n

الكود: مراقبة وحدة المعالجة المركزية والذاكرة

\n
package main\n\nimport (\n    "fmt"\n    "os"\n    "os/exec"\n    "strconv"\n    "strings"\n    "time"\n)\n\nfunc getCPUPercent() (float64, error) {\n    out, err := exec.Command("sh", "-c", "t                

المدونات

توصيات الكتب