𝗣𝗮𝗰𝗸𝗮𝗴𝗲.𝗷𝘀𝗼𝗻 vs 𝗚𝗼.𝗺𝗼𝗱: വേർഷൻ ഫീൽഡ് എവിടെപ്പോയി?

നിങ്ങൾ JavaScript-ൽ നിന്ന് Go-ലേക്ക് മാറുന്നുണ്ടെങ്കിൽ, ഒരു കാര്യം നിങ്ങളെ അത്ഭുതപ്പെടുത്തും.

ഒരു package.json ഫയലിൽ, വേർഷൻ ഏറ്റവും മുകളിൽ തന്നെ കാണാം. നിങ്ങൾക്ക് അത് വായിക്കാം. ഒരു pull request-ലൂടെ നിങ്ങൾക്ക് അത് മാറ്റാം. നിങ്ങൾക്ക് അത് തിരയാം. നിങ്ങളുടെ കോഡിനുള്ളിൽ തന്നെ നിലനിൽക്കുന്ന ഒരു വസ്തുതയാണിത്.

ഇനി ഒരു go.mod ഫയൽ തുറന്നു നോക്കൂ. അവിടെ വേർഷൻ കാണാനില്ല.

ഇതൊരു തെറ്റല്ല. ഇതൊരു തിരഞ്ഞെടുപ്പാണ്.

നിങ്ങളുടെ സ്വന്തം മോഡ്യൂളിനായി Go ഒരു version field ഉപയോഗിക്കുന്നില്ല. പകരം, Go git tags ആണ് ഉപയോഗിക്കുന്നത്.

Go-യിൽ ഒരു വേർഷൻ സെറ്റ് ചെയ്യാൻ നിങ്ങൾ ഇത് ചെയ്യണം:

git tag ആണ് ഏക ആധികാരിക ഉറവിടം (single source of truth). ആരെങ്കിലും go get റൺ ചെയ്യുമ്പോൾ, ശരിയായ commit കണ്ടെത്താനായി Go നിങ്ങളുടെ റിപ്പോസിറ്ററി ടാഗുകൾ പരിശോധിക്കുന്നു.

ഈ ഡിസൈനിന് വലിയൊരു ഗുണമുണ്ട്. ഒരു വേർഷന് ഒരിക്കലും തെറ്റായ കോഡിലേക്ക് വിരൽ ചൂണ്ടാൻ കഴിയില്ല. npm-ൽ, പബ്ലിഷ് ചെയ്ത കോഡും ടാഗ് ചെയ്ത സോഴ്സും തമ്മിൽ വ്യത്യാസം വരാൻ സാധ്യതയുണ്ട്. എന്നാൽ Go-യിൽ അവ രണ്ടും ഒന്നാണ്, കാരണം വേർഷൻ എന്നത് ഒരു commit-ലേക്കുള്ള പോയിന്റർ ആണ്.

എന്നിരുന്നാലും, ഇത് നിങ്ങളുടെ വർക്ക്ഫ്ലോയെ പല രീതിയിൽ മാറ്റുന്നു:

മിക്കവാറും മറ്റ് ഇക്കോസിസ്റ്റങ്ങൾ വേർഷൻ ഒരു ഫയലിൽ സൂക്ഷിക്കുന്നു:

Go വ്യത്യസ്തമാണ്. അത് git tags-നെ മാത്രം ആശ്രയിക്കുന്നു.

നിങ്ങളുടെ Go binary-യിൽ ഒരു വൃത്തിയുള്ള വേർഷൻ കാണിക്കണമെന്നുണ്ടെങ്കിൽ, ബിൽഡ് പ്രക്രിയയിൽ ldflags ഉപയോഗിച്ച് നിങ്ങൾക്ക് അത് ഉൾപ്പെടുത്താം. ടാഗ്, റിലീസ് പ്രക്രിയകൾ ഓട്ടോമേറ്റ് ചെയ്യാൻ പല ഡെവലപ്പർമാരും goreleaser പോലുള്ള ടൂളുകളും ഉപയോഗിക്കുന്നു.

ഈ രണ്ട് മോഡലുകളും വ്യത്യസ്ത മുൻഗണനകളെ പ്രതിനിധീകരിക്കുന്നു:

മാണിഫെസ്റ്റ് (manifest) എപ്പോഴും കോഡുമായി പൊരുത്തപ്പെടുന്നു എന്ന് ഉറപ്പാക്കാൻ Go ടാഗ് മോഡൽ തിരഞ്ഞെടുത്തു.

Go കോഡ് വിതരണം ചെയ്യുന്നവർക്കായി: നിങ്ങളുടെ ദൈനംദിന ജോലിയിൽ 'tag-only' മോഡൽ എങ്ങനെ അനുഭവപ്പെടുന്നു? നിങ്ങൾ അത് മാറ്റാൻ ആഗ്രഹിക്കുന്നുണ്ടോ?

Source: https://dev.to/dalirnet/packagejson-vs-gomod-where-did-the-version-field-go-3301