0Pricing
Go Academy · درس

إضافة التبعيات الخارجية

‏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 driver

go 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/gin

go 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/net

go 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,direct

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

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

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