38 - Go Modules

Go Modules

La version 1.11 de Go apporte un nouveau concept: les modules. Ils permettent une gestion plus efficace des packages (librairies) et accessoirement (ou pas) annoncent la disparition du GOPATH. Je vais dans ce billet vous présenter cette nouveauté avec un exemple concret.

Gestion des versions

Ce un peu plus c’est que les modules, contrairement aux packages, sont versionnés ce qui va nous permettre d’avoir des reproductible builds (désolé pour cet anglicisme mais je ne trouve pas l’équivalent en Français). Avec des packages classiques et donc sans gestion de version nous prenons le risque que notre code ne soit plus compatible avec les packages qu’il utilise en cas de go get -u (je suis à peu prés certain que ça vous est déja arrivé non ? ). La gestion des versions des modules Go va résoudre ce probléme puisque l’on va définir la version que l’on souhaite utiliser via le fichier go.mod ainsi plus de conflit de versions en cas de mise à jour.

Pour versionner notre module on va utiliser la gestion sémantique de version (SEMVER pour les initiés). Pour résumer la version va être definie sous la forme X.Y.Z avec:

  • X représentant le numéro de version MAJEURE, un changement de valeur implique des modifications non rétrocompatibles.
  • Y est le numéro de version MINEURE, ce chiffre est incrémenté en cas de modifications rétrocompatibles. Le plus souvent quand on ajoute des fonctionnalités sans changer les fonctionnalités et signatures de celles qui existent.
  • Z est le numéro de version CORRECTIF, qui est lié aux corrections de bugs.