إضافة التبعيات الخارجية
go get وإدارة الإصدارات وذاكرة التخزين المؤقت للوحدات
إضافة التبعيات الخارجية درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
العثور على الحزم
المصدر الأساسي للعثور على حزم Go هو pkg.go.dev. ابحث عن الحزم، واقرأ الوثائق، واطّلع على أمثلة الاستخدام:
# Search and explore at https://pkg.go.dev
# Popular packages:
# github.com/gin-gonic/gin — HTTP framework
# github.com/stretchr/testify — test assertions
# golang.org/x/sync — extended sync primitives
# github.com/spf13/cobra — CLI framework
# github.com/jackc/pgx/v5 — PostgreSQL drivergo get: إضافة تبعية
استخدم go get لإضافة تبعية. فهو ينزّل الوحدة ويحدّث go.mod وgo.sum:
# Add latest version
go get github.com/stretchr/testify
# Add specific version
go get github.com/stretchr/testify@v1.8.4
# Add a pre-release version
go get github.com/foo/bar@main
# go get updates go.mod:
# require github.com/stretchr/testify v1.8.4استخدام التبعية
بعد تنفيذ go get، استورد الحزمة واستخدمها بشكل طبيعي:
package main
import (
"fmt"
"github.com/stretchr/testify/assert"
"testing"
)
func TestAdd(t *testing.T) {
assert.Equal(t, 4, 2+2, "math should work")
fmt.Println("assertion done")
_ = assert.New // suppress unused import
}go mod download
نزّل مسبقًا جميع التبعيات المدرجة في go.mod إلى ذاكرة الوحدات المؤقتة:
# Download all deps from go.mod
go mod download
# Download specific module
go mod download github.com/gin-gonic/gin@v1.9.1
# Useful for:
# - Docker layer caching (copy go.mod/go.sum first, then download)
# - Pre-warming CI cache
# - Offline development setupاختيار الإصدارات الدلالية: MVS
تستخدم Go خوارزمية اختيار الحد الأدنى للإصدار (MVS)؛ إذ تختار دائمًا أقل إصدار مطلوب يلبّي جميع التبعيات. ولا تُجري ترقيات رئيسية تلقائية:
# If A requires gin v1.9.0
# and B requires gin v1.9.1
# MVS selects v1.9.1 (minimum that satisfies both)
# To upgrade ALL dependencies to latest minor/patch:
go get -u ./...
# To upgrade specific package:
go get -u github.com/gin-gonic/gingo mod why — تفسير التبعيات
اعرف سبب حاجة عملية البناء إلى وحدة معينة:
# Why is encoding/json needed?
go mod why encoding/json
# Why is golang.org/x/net needed?
go mod why golang.org/x/net
# Output shows the import chain:
# github.com/myapp
# github.com/gin-gonic/gin
# golang.org/x/netgo mod vendor لبناءات قابلة لإعادة الإنتاج
يثبّت التوريد جميع التبعيات داخل مستودعك لضمان بناءات قابلة لإعادة الإنتاج:
# Vendor all deps
go mod vendor
# Build only from vendor (no network)
go build -mod=vendor ./...
# Dockerfile pattern:
# COPY go.mod go.sum ./
# RUN go mod download
# COPY . .
# RUN go build ...الوحدات الخاصة مع GONOSUMCHECK وGOPRIVATE
اضبط Go للعمل مع الوحدات الخاصة المستضافة على خوادم داخلية:
# Tell Go not to use proxy/sumdb for private modules
export GOPRIVATE=github.com/mycompany/*
export GONOSUMCHECK=github.com/mycompany/*
# Or in go env:
go env -w GOPRIVATE=github.com/mycompany/*
# For enterprise Go proxy:
export GOPROXY=https://proxy.mycompany.com,directgo clean -modcache
امسح ذاكرة الوحدات المؤقتة لإجبار Go على إعادة تنزيل جميع التبعيات:
# Clear entire module cache
go clean -modcache
# Clear cache for specific version
go clean -modcache github.com/gin-gonic/gin@v1.9.1
# Useful when:
# - Cache is corrupted
# - Testing with a fresh environment
# - Disk space cleanupفحص الثغرات: govulncheck
يفحص الماسح الرسمي للثغرات في Go تبعياتك بحثًا عن CVEs معروفة:
# Install govulncheck
go install golang.org/x/vuln/cmd/govulncheck@latest
# Scan your module
govulncheck ./...
# Output example:
# Vulnerability #1: GO-2023-1234
# github.com/foo/bar v1.2.3
# Fixed in: v1.2.4
# Suggestion: go get github.com/foo/bar@v1.2.4تحقق سريع
ما الأمر الذي يضيف إصدارًا محددًا من تبعية إلى وحدتك؟
مراجعة: التبعيات الخارجية
الخلاصة:
- يضيف
go get pkg@versionالتبعيات - تستخدم Go خوارزمية MVS، أي أقل إصدار يلبّي جميع المتطلبات
- ينظف
go mod tidyالتبعيات غير المستخدمة - يُستخدم
go mod vendorلبناءات كاملة قابلة لإعادة الإنتاج دون اتصال - استخدم
GOPRIVATEللوحدات الخاصة - شغّل
govulncheckللعثور على الثغرات
الأسئلة الشائعة
هل درس «إضافة التبعيات الخارجية» مجاني؟
نعم — نص درس «إضافة التبعيات الخارجية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «إضافة التبعيات الخارجية»؟
go get وإدارة الإصدارات وذاكرة التخزين المؤقت للوحدات تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «إضافة التبعيات الخارجية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الحزم: تنظيم شيفرة Go
- وحدات Go باستخدام go mod
- إضافة التبعيات الخارجية
- الحزم الداخلية ومساحات العمل