مرکزی مواد پر جائیں
ماڈیول 9 · سبق 4 از 5کورس میں 44/50~12 min
ماڈیول اسباق (4/5)

ماڈیولز پر جائیں۔

A Go ماڈیول ایک قابل ورژن یونٹ ہے جو ایک یا زیادہ پیکجوں پر مشتمل ہے۔ یہ جدید انحصاری نظام کی بنیاد ہے (Go 1.11+): مزید نہیں GOPATH، مزید لازمی نہیں vendor، واضح اور تولیدی انحصار۔

go.mod: ماڈیول مینی فیسٹ

Code
module example.com/myapp

go 1.22

require (
    github.com/google/uuid v1.6.0
    golang.org/x/time     v0.5.0
)

تین اہم ہدایات:

  • module <path> — ماڈیول کا درآمدی راستہ۔ تمام داخلی پیکیجز example.com/myapp/sub/pkg کے بطور درآمد کیے گئے ہیں۔ اس کا حقیقی URL ہونا ضروری نہیں ہے، لیکن go get کے ذریعے شائع کرنے کے لیے اسے حل کرنا ضروری ہے۔
  • go <version> — کم از کم Go ورژن درکار ہے (یہ کنٹرول کرنے کے لیے بھی استعمال کیا جاتا ہے کہ کن زبان کی خصوصیات کی اجازت ہے، جیسے کہ 1.23 میں رینج اوور فنک)۔
  • require — براہ راست انحصار اپنے درست ورژن کے ساتھ۔

دیگر ہدایات: replace (کانٹے یا مقامی راستے کے ساتھ ڈیپ کا متبادل)، exclude، retract۔

go.sum: کرپٹوگرافک لاک فائل

go.mod کے ساتھ، go.sum ہر ڈاؤن لوڈ کردہ ورژن کی ایک کرپٹوگرافک ہیش پر مشتمل ہے (بشمول عبوری انحصار)۔ یہ ** تولیدی صلاحیت** کی ضمانت دیتا ہے: اگر کوئی شائع شدہ ورژن کے ساتھ چھیڑ چھاڑ کرتا ہے تو تعمیر ناکام ہوجاتی ہے۔

ہمیشہ اس کا ارتکاب کریں۔ یہ خود بخود go کمانڈز کے ذریعہ اپ ڈیٹ ہوجاتا ہے۔

ضروری احکام

Bash
go mod init example.com/myapp        # create go.mod
go get github.com/google/uuid        # add the dep at its latest version
go get github.com/google/uuid@v1.5.0 # specific version
go get -u ./...                      # upgrade every dep
go mod tidy                          # remove unused deps, add missing ones
go mod download                      # download everything into the cache
go mod why github.com/x/y            # explain why a dep is included
go mod graph                         # full dependency graph

go mod tidy وہ ہے جسے آپ درآمدات میں ہر تبدیلی کے بعد چلاتے ہیں: یہ اس بات کی ضمانت دیتا ہے کہ go.mod اصل میں استعمال شدہ پیکیجز کی بالکل عکاسی کرتا ہے۔

سیمنٹک امپورٹ ورژننگ (SIV)

ورژنز SemVer کی پیروی کرتے ہیں: v1.2.3 = MAJOR.MINOR.PATCH۔ دلچسپ حصہ ** میجر v2+** ہے:

  • میجر v0 اور v1 → عام راستہ: github.com/foo/bar۔
  • میجر v2 یا بعد کا → راستہ بڑا ورژن شامل ہے: github.com/foo/bar/v2۔
Go
import "github.com/foo/bar/v2"

یہ آپ کو ایک ہی لائبریری کے v1 اور v2 دونوں کو ایک ہی وقت میں درآمد کرنے دیتا ہے (ترقی پسند منتقلی کے دوران مفید)۔

راستے اور اندرونی پیکجز درآمد کریں۔

اگر آپ کا ماڈیول example.com/myapp ہے، تو ایک utils/ ذیلی فولڈر اس طرح درآمد کیا جاتا ہے:

Go
import "example.com/myapp/utils"

راستہ صرف go.mod میں اعلان کردہ نام پر منحصر ہے، ڈسک پر موجود مقام پر نہیں: ایک مختلف فولڈر میں ایک ہی کوڈ کام کرتا رہتا ہے۔

ورک اسپیس موڈ (1.18+ پر جائیں)

متعدد ماڈیولز پر کام کرنے کے لیے جو ایک ہی وقت میں ایک دوسرے کا حوالہ دیتے ہیں (مثال کے طور پر لائبریری اور ایک ایپ جو اسے استعمال کرتی ہے):

Bash
go work init ./lib ./app

یہ go.work بناتا ہے: go build شائع شدہ کو ڈاؤن لوڈ کرنے کے بجائے ./lib کا مقامی ورژن استعمال کرے گا۔ اس کا ارتکاب نہ کریں go.work (یہ ایک ترقیاتی ماحول ہے)۔

مشقیں

ورزش#go.m9.l4.e1
کوششیں: 0لوڈ ہو رہا ہے…

ماڈیول example.com/myapp ہے اور اس میں utils ذیلی فولڈر ہے۔ مکمل راستے کا استعمال کرتے ہوئے مین میں ذیلی پیکیج درآمد کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

درآمدی راستہ ماڈیول کا نام ہے (go.mod سے) اور فولڈر کا رشتہ دار راستہ۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#go.m9.l4.e2
کوششیں: 0لوڈ ہو رہا ہے…

fmt اور os دونوں کو درآمد کرتے ہوئے، درآمد (... ) نحو کے ساتھ انفرادی درآمدات کو ایک درآمدی گروپ میں تبدیل کریں۔

ایڈیٹر لوڈ ہو رہا ہے…

3 کوششوں کے بعد حل دستیاب ہے۔

Quiz#go.m9.l4.e3
تیار

کون سی کمانڈ انحصار کو ہٹاتی ہے جو اب go.mod سے درآمد نہیں کی گئی ہیں اور گمشدہ کو شامل کرتی ہے؟

Go
$ go mod ???
جواب کے اختیارات