𝗣𝗮𝗰𝗸𝗮𝗴𝗲.𝗷𝘀𝗼𝗻 dhidi ya 𝗚𝗼.𝗺𝗼𝗱: 𝗜𝗹𝗶𝗸𝘂𝗮 𝗶𝗸apotea wapi?

Ukihamia kutoka JavaScript kwenda Go, jambo moja litakushangaza.

Katika faili la package.json, toleo (version) lipo juu kabisa. Unaweza kulisoma. Unaweza kulibadilisha kwenye pull request. Unaweza kulitafuta. Ni ukweli unaoishi ndani ya kodi yako.

Sasa fungua faili la go.mod. Toleo halipo hapo.

Hili si kosa. Ni chaguo.

Go haitumii uwanja wa toleo (version field) kwa ajili ya moduli yako. Badala yake, Go hutumia git tags.

Ili kuweka toleo katika Go, unafanya hivi:

Git tag ndiyo chanzo pekee cha ukweli (single source of truth). Mtu anapokimbiza go get, Go huangalia tag za ghala (repository) yako ili kupata commit sahihi.

Muundo huu una nguvu kubwa. Toleo haliwezi kamwe kuashiria kodi isiyo sahihi. Katika npm, kodi iliyochapishwa na chanzo kilichowekewa tag vinaweza kutengana. Katika Go, ni kitu kimoja kwa sababu toleo ni kiashiria (pointer) cha commit.

Hata hivyo, hili linabadilisha mtiririko wako wa kazi (workflow) kwa njia kadhaa:

Mifumo mingine mingi huweka toleo kwenye faili:

Go ni tofauti. Inategemea git tags pekee.

Ikiwa unataka binary yako ya Go ionyeshe toleo safi, unaweza kuliingiza wakati wa mchakato wa kujenga (build process) kwa kutumia ldflags. Watengenezaji wengi pia hutumia zana kama goreleaser ili kuwezesha mchakato wa tag na toleo (release) kiotomatiki.

Mifano hii miwili inawakilisha vipaumbele tofauti:

Go ilichagua mfano wa tag ili kuhakikisha kuwa manifest kila wakati inalingana na kodi.

Kwa wale wanaotoa kodi ya Go: Unaonaje mfumo wa kutumia lebo pekee (tag-only model) katika kazi yako ya kila siku? Je, ungeubadilisha?

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