Introduction

Depuis la version 1.21 de Go, la directive go <version number> dans le fichier go.mod inclut un numéro de patch complet. Cependant, de nombreux projets utilisent cette fonctionnalité de manière incorrecte, ce qui peut causer des problèmes pour les autres projets qui en dépendent.

Contexte Technique

La version spécifiée dans la directive go du fichier go.mod représente la version minimale requise pour compiler le projet. Il est important de noter que cette version n'est pas la version utilisée pour compiler le projet, mais plutôt la version minimale que n'importe qui peut utiliser pour compiler le projet. Cette spécification de version est virale, car elle affecte tous les projets qui dépendent du projet en question, directement ou indirectement.

Analyse et Implications

Lorsqu'un projet spécifie une version comme 1.25.7 dans sa directive go, il décide pour tous les projets qui l'importent, directement ou indirectement, qu'ils doivent utiliser au moins la version 1.25.7 de Go pour compiler leur projet. Cela peut causer des problèmes pour les projets qui ne peuvent pas utiliser cette version pour des raisons techniques ou de compatibilité.

Il est important de noter que les outils comme actions/setup-go utilisent parfois la directive go pour déterminer la version de Go à utiliser, ce qui est incorrect. À la place, il est recommandé d'utiliser la directive toolchain ou d'autres mécanismes pour sélectionner la version de Go.

Perspective

Il est essentiel de comprendre l'impact de la spécification de version dans le fichier go.mod et de l'utiliser de manière responsable. Les projets doivent spécifier la version minimale requise pour compiler leur projet, plutôt que de spécifier la version qu'ils utilisent pour leur propre compilation. Cela permettra d'éviter les problèmes de compatibilité et de garantir que les projets qui dépendent du projet en question puissent être compilés avec succès.