మాడ్యూల్ పాఠాలు (4/5)
గో మాడ్యూల్స్
ఒక Go మాడ్యూల్ అనేది ఒకటి లేదా అంతకంటే ఎక్కువ ప్యాకేజీలతో రూపొందించబడిన సంస్కరణ చేయగల యూనిట్. ఇది ఆధునిక డిపెండెన్సీ సిస్టమ్ (గో 1.11+) యొక్క పునాది: ఇకపై GOPATH, తప్పనిసరి vendor, స్పష్టమైన మరియు పునరుత్పాదక డిపెండెన్సీలు లేవు.
go.mod: మాడ్యూల్ మానిఫెస్ట్
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 ఆదేశాల ద్వారా స్వయంచాలకంగా నవీకరించబడుతుంది.
ముఖ్యమైన ఆదేశాలు
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 graphgo 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.
import "github.com/foo/bar/v2"ఇది ఒకే లైబ్రరీకి చెందిన v1 మరియు v2 రెండింటినీ ఒకేసారి దిగుమతి చేసుకోవడానికి మిమ్మల్ని అనుమతిస్తుంది (ప్రగతిశీల వలసల సమయంలో ఉపయోగపడుతుంది).
పాత్లు మరియు అంతర్గత ప్యాకేజీలను దిగుమతి చేయండి
మీ మాడ్యూల్ example.com/myapp అయితే, utils/ ఉప-ఫోల్డర్ ఇలా దిగుమతి చేయబడుతుంది:
import "example.com/myapp/utils"మార్గం మాత్రమే go.modలో ప్రకటించబడిన పేరుపై ఆధారపడి ఉంటుంది, డిస్క్లోని స్థానంపై కాదు: వేరే ఫోల్డర్లోని అదే కోడ్ పని చేస్తూనే ఉంటుంది.
వర్క్స్పేస్ మోడ్ (1.18+ వెళ్లండి)
ఒకే సమయంలో ఒకదానికొకటి సూచించే బహుళ మాడ్యూల్లపై పని చేయడానికి (ఉదా. లైబ్రరీ మరియు దానిని ఉపయోగించే యాప్):
go work init ./lib ./appఇది go.workని సృష్టిస్తుంది: go build ప్రచురించిన దాన్ని డౌన్లోడ్ చేయడానికి బదులుగా ./lib యొక్క స్థానిక సంస్కరణను ఉపయోగిస్తుంది. ** go.work** కట్టుబడి ఉండకండి (ఇది అభివృద్ధి వాతావరణం).
వ్యాయామాలు
మాడ్యూల్ example.com/myapp మరియు utils సబ్-ఫోల్డర్ను కలిగి ఉంది. పూర్తి పాత్ని ఉపయోగించి సబ్-ప్యాకేజీని మెయిన్లో దిగుమతి చేయండి.
సూచనను చూపించు
దిగుమతి పాత్ అనేది మాడ్యూల్ పేరు (go.mod నుండి) మరియు ఫోల్డర్ యొక్క సంబంధిత మార్గం.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
fmt మరియు os రెండింటినీ దిగుమతి చేస్తూ, దిగుమతి (... ) సింటాక్స్తో వ్యక్తిగత దిగుమతులను దిగుమతి సమూహంగా మార్చండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
go.mod నుండి ఇకపై దిగుమతి చేయని డిపెండెన్సీలను ఏ ఆదేశం తీసివేసి, తప్పిపోయిన వాటిని జోడిస్తుంది?
$ go mod ???