توزيع أدوات CLI
الترجمة البرمجية المتقاطعة وgoreleaser ومستودعات homebrew
توزيع أدوات CLI درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
استخدام go install للتوزيع المحلي
يترجم go install github.com/user/tool@latest الملف التنفيذي ويثبّته في $GOPATH/bin. ويحتاج المستخدمون إلى تثبيت Go.
الترجمة المتقاطعة
تدعم Go الترجمة المتقاطعة أصلًا. اضبط GOOS وGOARCH لاستهداف أنظمة تشغيل مختلفة:
GOOS=linux GOARCH=amd64 go build -o myapp-linux-amd64
GOOS=darwin GOARCH=arm64 go build -o myapp-darwin-arm64
GOOS=windows GOARCH=amd64 go build -o myapp-windows-amd64.exeخيارات البناء للإصدار
أزل معلومات التصحيح وعطّل CGO للحصول على ملفات تنفيذية أصغر وثابتة:
CGO_ENABLED=0 go build -ldflags="-s -w" -o myappتضمين معلومات الإصدار
احقن معلومات وقت البناء باستخدام ldflags:
var version = "dev"
var commit = "none"
// Build: go build -ldflags="-X main.version=1.2.3 -X main.commit=abc1234"GoReleaser
تؤتمت GoReleaser الترجمة المتقاطعة، وإنشاء الحزم (tar.gz و.zip)، وإنشاء قيم التحقق، ورفع الإصدارات إلى GitHub. اضبطها في .goreleaser.yaml.
# .goreleaser.yaml
builds:
- env: [CGO_ENABLED=0]
goos: [linux, darwin, windows]
goarch: [amd64, arm64]مستودع Homebrew
انشر صيغة Homebrew حتى يتمكن مستخدمو macOS/Linux من التثبيت باستخدام brew install. ويمكن لـ GoReleaser إنشاء الصيغة تلقائيًا.
التكامل المستمر والتسليم المستمر باستخدام GitHub Actions
استخدم GitHub Action للبناء والإصدار عند كل دفع لوسم. وتوفر GoReleaser إجراء GitHub رسميًا.
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v5
with: { version: latest, args: release --clean }
env: { GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" }التوزيع باستخدام Docker
غلّف CLI في صورة Docker للمستخدمين الذين يفضّلون الحاويات. استخدم بناءً متعدد المراحل للحفاظ على صغر حجم الصورة النهائية.
FROM golang:1.22 AS build
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o myapp
FROM scratch
COPY --from=build /app/myapp /myapp
ENTRYPOINT ["/myapp"]استخدام go:embed للأصول
ضمّن الملفات الثابتة (القوالب ومخططات الإعداد) في الملف التنفيذي باستخدام //go:embed حتى يكون الملف التنفيذي مكتفيًا ذاتيًا بالكامل.
//go:embed templates/*
var templates embed.FSالوحدات ذات الإصدارات
انشر وحدة CLI وفقًا لنظام إصدارات وحدات Go. بالنسبة إلى v2+، يجب أن يتضمن مسار الاستيراد /v2، كما يجب أن يطابق مسار الوحدة في go.mod ذلك المسار.
التوافق مع الإصدارات السابقة
اتبع semver. يجوز للإصدارات الثانوية إضافة خيارات، لكن لا يجوز لها إزالة الخيارات الحالية أو إعادة تسميتها. وتتطلب التغييرات الكاسرة رفع الإصدار الرئيسي.
اختبار سريع
كيف تنشئ ملفًا تنفيذيًا ثابتًا لـ Go يستهدف Linux من جهاز macOS؟
خلاصة: توزيع أدوات CLI
النقاط الأساسية:
- أجرِ الترجمة المتقاطعة باستخدام GOOS/GOARCH؛ واستخدم CGO_ENABLED=0 للملفات التنفيذية الثابتة
- استخدم GoReleaser لأتمتة مسار الإصدار
- احقن الإصدار باستخدام -ldflags "-X main.version=..."
- استخدم go:embed لإنشاء ملفات تنفيذية مكتفية ذاتيًا مع أصول مضمّنة
الأسئلة الشائعة
هل درس «توزيع أدوات CLI» مجاني؟
نعم — نص درس «توزيع أدوات CLI» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «توزيع أدوات CLI»؟
الترجمة البرمجية المتقاطعة وgoreleaser ومستودعات homebrew تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «توزيع أدوات CLI»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.