𝗣𝗮𝗰𝗸𝗮𝗴𝗲.𝗷𝘀𝗼𝗻 vs 𝗚𝗼.𝗺𝗼𝗱: వెర్షన్ ఫీల్డ్ ఎక్కడికి పోయింది?

మీరు JavaScript నుండి Go కి మారితే, ఒక విషయం మిమ్మల్ని ఆశ్చర్యపరుస్తుంది.

package.json ఫైల్‌లో, వెర్షన్ సరిగ్గా పైన ఉంటుంది. మీరు దానిని చదవవచ్చు. మీరు pull request లో దానిని మార్చవచ్చు. మీరు దాని కోసం వెతకవచ్చు. అది మీ కోడ్‌లోనే ఉండే ఒక వాస్తవం.

ఇప్పుడు ఒక go.mod ఫైల్‌ను తెరవండి. అక్కడ వెర్షన్ ఉండదు.

ఇది పొరపాటు కాదు. ఇది ఒక ఎంపిక.

Go మీ స్వంత మాడ్యూల్ కోసం వెర్షన్ ఫీల్డ్‌ను ఉపయోగించదు. దానికి బదులుగా, Go git tags ఉపయోగిస్తుంది.

Goలో వెర్షన్‌ను సెట్ చేయడానికి, మీరు ఇలా చేయాలి:

git tag అనేది ఏకైక నిజమైన మూలం (single source of truth). ఎవరైనా go get రన్ చేసినప్పుడు, సరైన commitని కనుగొనడానికి Go మీ రిపోజిటరీ ట్యాగ్‌లను చూస్తుంది.

ఈ డిజైన్‌కు ఒక ప్రధాన బలం ఉంది. వెర్షన్ ఎప్పుడూ తప్పు కోడ్‌ని సూచించదు. npmలో, పబ్లిష్ చేయబడిన కోడ్ మరియు ట్యాగ్ చేయబడిన సోర్స్ వేరువేరుగా ఉండే అవకాశం ఉంది. కానీ Goలో, అవి రెండూ ఒకటే, ఎందుకంటే వెర్షన్ అనేది ఒక commitకి పాయింటర్.

అయితే, ఇది మీ వర్క్‌ఫ్లోను (workflow) పలు విధాలుగా మారుస్తుంది:

ఇతర చాలా ఎకోసిస్టమ్స్ వెర్షన్‌ను ఒక ఫైల్‌లో ఉంచుతాయి:

Go భిన్నమైనది. ఇది కేవలం git tags పైనే ఆధారపడుతుంది.

మీ Go బైనరీ క్లీన్ వెర్షన్‌ను చూపించాలనుకుంటే, మీరు build ప్రాసెస్‌లో ldflags ఉపయోగించి దానిని ఇంజెక్ట్ చేయవచ్చు. చాలా మంది డెవలపర్లు ట్యాగ్ మరియు రిలీజ్ ప్రాసెస్‌ను ఆటోమేట్ చేయడానికి goreleaser వంటి సాధనాలను కూడా ఉపయోగిస్తారు.

ఈ రెండు మోడల్స్ వేర్వేరు ప్రాధాన్యతలను సూచిస్తాయి:

మానిఫెస్ట్ (manifest) ఎల్లప్పుడూ కోడ్‌తో సరిపోలేలా చూడటానికి Go ట్యాగ్ మోడల్‌ను ఎంచుకుంది.

Go కోడ్‌ను పంపిణీ చేసేవారికి: మీ రోజువారీ పనిలో tag-only మోడల్ ఎలా అనిపిస్తుంది? మీరు దానిని మారుస్తారా?

మూలం: https://dev.to/dalirnet/packagejson-vs-gomod-where-did-the-version-field-go-3301