মূল কন্টেন্টে যান
মডিউল 9 · 4-এর পাঠ 5কোর্সে 44/50~12 min
মডিউল পাঠ (4/5)

মডিউল যান

একটি গো মডিউল হল একটি সংস্করণযোগ্য ইউনিট যা এক বা একাধিক প্যাকেজ নিয়ে গঠিত। এটি আধুনিক নির্ভরতা ব্যবস্থার ভিত্তি (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> — ন্যূনতম গো সংস্করণ প্রয়োজন (কোন ভাষা বৈশিষ্ট্যগুলি অনুমোদিত তা নিয়ন্ত্রণ করতেও ব্যবহৃত হয়, যেমন 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 এবং এতে একটি ইউটিলস সাব-ফোল্ডার রয়েছে। সম্পূর্ণ পথ ব্যবহার করে প্রধান উপ-প্যাকেজ আমদানি করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ইম্পোর্ট পাথ হল মডিউলের নাম (go.mod থেকে) প্লাস ফোল্ডারের আপেক্ষিক পাথ।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম#go.m9.l4.e2
প্রচেষ্টা: 0লোড হচ্ছে...

fmt এবং os উভয় ইম্পোর্ট করে ইম্পোর্ট (... ) সিনট্যাক্স সহ পৃথক ইম্পোর্টগুলিকে একটি ইম্পোর্ট গ্রুপে পরিণত করুন৷

সম্পাদক লোড হচ্ছে...

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

Quiz#go.m9.l4.e3
প্রস্তুত

কোন কমান্ড go.mod থেকে আর আমদানি করা নির্ভরতাগুলিকে সরিয়ে দেয় এবং অনুপস্থিতগুলিকে যুক্ত করে?

Go
$ go mod ???
উত্তরের বিকল্প