ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 9 · 5లో పాఠం 4కోర్సులో 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> — అవసరమైన కనీస 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 ???
సమాధాన ఎంపికలు