الحزم الداخلية ومساحات العمل
internal/ وتوجيهات replace وgo work
الحزم الداخلية ومساحات العمل درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
دليل internal/
لا يمكن استيراد الحزم الموجودة داخل دليل internal/ إلا من الشيفرة الموجودة ضمن شجرة الدليل الأب. ويفرض ذلك تغليف الحزم:
// Project structure:
// myapp/
// main.go
// internal/
// auth/auth.go <- can only be imported by myapp/
// db/db.go <- can only be imported by myapp/
// api/
// handlers.go <- can import myapp/internal/auth
// External package CANNOT do:
// import "myapp/internal/auth" <- compile errorاستخدام حزم internal/
يمكن للشيفرة الموجودة في الوحدة نفسها (فوق دليل internal/) استيراد الحزم الداخلية بحرية:
// myapp/api/handlers.go
package api
import (
"myapp/internal/auth"
"myapp/internal/db"
)
func GetUser(id int) (*db.User, error) {
if !auth.IsValid() {
return nil, auth.ErrUnauthorized
}
return db.FindUser(id)
}لماذا نستخدم internal/؟
فوائد اصطلاح internal/:
- يمنع الوحدات الأخرى من الاعتماد على تفاصيل التنفيذ
- يتيح لك إعادة الهيكلة بحرية دون تعطيل المستدعين الخارجيين
- يوضح أن هذا الجزء ليس من API العامة
- تفرض أدوات Go القياسية هذا القيد أثناء الترجمة
مساحات عمل Go — go work
قدمت Go 1.18 مساحات العمل للعمل مع عدة وحدات محلية في الوقت نفسه دون توجيهات replace:
# Create a workspace in parent directory:
go work init ./myapp ./mylib
# Creates go.work:
# go 1.21
# use (
# ./myapp
# ./mylib
# )
# Now myapp can import mylib without replace directivesgo work sync
زامن تبعيات مساحة العمل باستخدام go work sync:
# go.work file:
go 1.21
use (
./api
./worker
./shared
)
# Sync all module dependencies:
go work sync
# Build across all workspace modules:
go build ./...
# Test across all workspace modules:
go test ./...مساحة العمل مقابل توجيه replace
مقارنة بين نهجين للتطوير المحلي متعدد الوحدات:
// BEFORE workspaces (cumbersome):
// go.mod in myapp:
// replace github.com/me/mylib => ../mylib
// Must remove before publishing!
// WITH workspaces (cleaner):
// go.work at root:
// use (./myapp ./mylib)
// go.mod files stay clean — go.work is gitignoredحالات استخدام مساحات العمل
استخدم مساحات عمل Go في الحالات التالية:
- تطوير مكتبة والمستهلك الخاص بها في الوقت نفسه
- مستودع أحادي يحتوي على عدة وحدات تشير إلى بعضها
- اختبار تغييرات وحدة مشتركة قبل نشرها
- العمل على تفرع من تبعية بالتزامن مع تطبيقك
go work add وgo work use
أدر إدخالات مساحة العمل باستخدام الأوامر الفرعية لـ go work:
# Add a module to the workspace
go work use ./newservice
# Remove a module from workspace
go work use -r ./oldservice
# Edit go.work directly (opens $EDITOR):
go work edit
# go.work should usually be gitignored:
echo "go.work" >> .gitignore
echo "go.work.sum" >> .gitignoreالجمع بين Internal ومساحات العمل
تتوافق الحزم الداخلية ومساحات العمل بشكل طبيعي في المستودعات الأحادية:
// Monorepo structure:
// services/
// go.work
// auth-service/
// internal/tokens/ <- private to auth-service
// order-service/
// internal/pricing/ <- private to order-service
// shared/
// models/ <- shared across services
// go.work:
// use (./auth-service ./order-service ./shared)أفضل الممارسات لتنظيم الحزم
توصيات تنظيم مشاريع Go:
- استخدم بنية حزم مسطحة للمشاريع الصغيرة، وتجنب التنظيم المبكر غير الضروري
- استخدم
internal/لتفاصيل التنفيذ غير المخصصة للاستخدام الخارجي - ضع حزم CLI الرئيسية ضمن
cmd/appname/ - استخدم مساحات العمل للمستودعات متعددة الوحدات، لكن أضف
go.workإلى gitignore - تجنب التداخل العميق؛ واجعل الحزم بحد أقصى من 3 إلى 4 مستويات
تحقق سريع
من يمكنه استيراد حزمة موجودة داخل دليل internal/؟
مراجعة: الحزم الداخلية ومساحات العمل
الخلاصة:
- يقيّد
internal/الاستيرادات بشجرة الدليل الأب، ويفرض المترجم ذلك - استخدم
internal/لإخفاء تفاصيل التنفيذ عن المستهلكين الخارجيين - ينشئ
go work initمساحة عمل للتطوير المحلي متعدد الوحدات - تحل مساحات العمل محل توجيهات
replaceفي التطوير المحلي - أضف
go.workوgo.work.sumإلى gitignore
الأسئلة الشائعة
هل درس «الحزم الداخلية ومساحات العمل» مجاني؟
نعم — نص درس «الحزم الداخلية ومساحات العمل» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «الحزم الداخلية ومساحات العمل»؟
internal/ وتوجيهات replace وgo work تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «الحزم الداخلية ومساحات العمل»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الحزم: تنظيم شيفرة Go
- وحدات Go باستخدام go mod
- إضافة التبعيات الخارجية
- الحزم الداخلية ومساحات العمل