0Pricing
Go Academy · درس

الحزم: تنظيم شيفرة Go

تعريفات الحزم والاستيرادات والأسماء المُصدَّرة

الحزم: تنظيم شيفرة Go درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

ما الحزمة؟

ينتمي كل ملف مصدر في Go إلى حزمة. يظهر اسم الحزمة في أعلى كل ملف. تجمع الحزم الشيفرة ذات الصلة وتتحكم في مستوى الرؤية:

// file: math/calc.go
package math

// Exported — accessible from other packages (capital letter)
func Add(a, b int) int { return a + b }

// Unexported — package-private (lowercase)
func helper() int { return 42 }

تصريح الحزمة ومسار الاستيراد

يختلف اسم الحزمة (القصير) عن مسار الاستيراد (مسار الوحدة أو الدليل الكامل):

// Import path: github.com/myapp/util/stringutil
// Package name: stringutil (last segment by convention)
package stringutil

func Reverse(s string) string {
    r := []rune(s)
    for i, j := 0, len(r)-1; i < j; i, j = i+1, j-1 {
        r[i], r[j] = r[j], r[i]
    }
    return string(r)
}

استيراد الحزم

استخدم import لاستيراد الحزم الأخرى. تتطلب Go استخدام جميع الحزم المستوردة:

package main

import (
    "fmt"                         // standard library
    "strings"                     // standard library
    "github.com/myapp/util/math"  // third-party or local
)

func main() {
    fmt.Println(strings.ToUpper("hello"))
    fmt.Println(math.Add(1, 2))
}

المعرّفات المُصدَّرة وغير المُصدَّرة

المعرّفات التي تبدأ بحرف كبير تكون مُصدَّرة (عامة). أما المعرّفات التي تبدأ بحرف صغير فتكون غير مُصدَّرة (خاصة بالحزمة):

package server

// Exported: accessible from other packages
type Server struct {
    Addr    string   // exported field
    timeout int      // unexported field
}

// Exported method
func (s *Server) Start() error { return nil }

// Unexported helper
func (s *Server) listen() {}

الحزمة package main والدالة func main

تُعد الحزمة main خاصة؛ فهي تعرّف ملفًا تنفيذيًا. وتُعد الدالة main نقطة الدخول:

package main

import "fmt"

func main() {
    fmt.Println("Hello, Go!")
    // Program starts here and ends here
}

// All other packages are libraries — no main() needed

الدالة init()

يمكن أن تحتوي كل حزمة على دالة init() واحدة أو أكثر، وتُنفَّذ هذه الدوال تلقائيًا قبل main() وبترتيب التصريح عنها:

package config

import "fmt"

var DB string

func init() {
    DB = "localhost:5432/mydb"
    fmt.Println("config package initialized")
}

// init runs once when the package is first imported
// Multiple init() functions per file/package are allowed

الاستيراد الفارغ للآثار الجانبية

استورد حزمة لتنفيذ آثار دالة init() الجانبية فقط، باستخدام المعرّف الفارغ:

package main

import (
    "database/sql"
    _ "github.com/lib/pq"  // registers PostgreSQL driver via init()
)

func main() {
    db, err := sql.Open("postgres", "host=localhost dbname=test")
    _ = db
    _ = err
}

الاستيرادات المستعارة

أعد تسمية الحزمة عند استيرادها لتجنب تعارض الأسماء أو للاختصار:

package main

import (
    "fmt"
    gomath "math"              // alias to avoid collision
    mymath "github.com/me/math"
)

func main() {
    fmt.Println(gomath.Sqrt(16))     // 4
    fmt.Println(mymath.Add(1, 2))    // 3
}

اصطلاحات تسمية الحزم

اصطلاحات تسمية حزم Go:

  • قصيرة، وبأحرف صغيرة، ومكوّنة من كلمة واحدة: http وjson وfmt
  • تطابق اسم الدليل: util/stringutil/ ← الحزمة stringutil
  • لا تستخدم الشرطات السفلية أو camelCase في أسماء الحزم
  • تجنب الأسماء العامة مثل util وcommon وhelper
  • اسم الحزمة جزء من المعرّف: يُفضَّل استخدام http.Client بدلًا من httplib.HTTPClient

الاستيرادات الدائرية

لا تسمح Go بالاستيرادات الدائرية. فلا يمكن للحزمة A استيراد B إذا كانت B تستورد A. عالج ذلك باستخراج الشيفرة المشتركة إلى حزمة ثالثة:

// WRONG: A imports B, B imports A — compile error
// package a imports "myapp/b"
// package b imports "myapp/a"

// SOLUTION: extract shared types to package c
// package a imports "myapp/c"
// package b imports "myapp/c"
// No circular dependency

تحقق سريع

ما الذي يجعل المعرّف مُصدَّرًا في Go؟

مراجعة: الحزم

المفاهيم الأساسية للحزم:

  • يبدأ كل ملف بـ package name
  • الحرف الكبير = مُصدَّر (عام)، والحرف الصغير = غير مُصدَّر (خاص بالحزمة)
  • استورد باستخدام المسار الكامل، واستخدم الحزمة باسمها القصير
  • تُنفَّذ init() تلقائيًا قبل main()
  • استخدم الاستيراد الفارغ _ "pkg" للآثار الجانبية فقط
  • لا يُسمح بالاستيرادات الدائرية

الأسئلة الشائعة

هل درس «الحزم: تنظيم شيفرة Go» مجاني؟

نعم — نص درس «الحزم: تنظيم شيفرة Go» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «الحزم: تنظيم شيفرة Go»؟

تعريفات الحزم والاستيرادات والأسماء المُصدَّرة تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «الحزم: تنظيم شيفرة Go»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الحزم: تنظيم شيفرة Go
  2. وحدات Go باستخدام go mod
  3. إضافة التبعيات الخارجية
  4. الحزم الداخلية ومساحات العمل
← العودة إلى Go Academy