الحزم: تنظيم شيفرة 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الحزم: تنظيم شيفرة Go
- وحدات Go باستخدام go mod
- إضافة التبعيات الخارجية
- الحزم الداخلية ومساحات العمل