Impossible d'exiger une certaine version d'un package Go sans module
Je souhaite exiger une certaine version d'un package Go qui n'a pas encore été converti en modules, je souhaite l'exiger dans mon go.modfichier. Plus précisément, le package est "github.com/docker/docker/pkg/[email protected]"
Lorsque j'exécute la commande suivante, j'obtiens la sortie suivante:
$ go get -v github.com/docker/docker/pkg/[email protected]
go: found github.com/docker/docker/pkg/system in github.com/docker/docker v17.12.0-ce-rc1.0.20200916142827-bd33bbf0497b+incompatible
Comme vous pouvez le voir, la version v17.12.0-ceest téléchargée, non v19.03.13. J'ai également remarqué le suffixe "+ incompatible", mais je ne suis pas sûr que cela ait quoi que ce soit à voir avec le problème. Selon la documentation
la commande go ajoute un suffixe + incompatible aux versions avec la version majeure 2 ou supérieure sans fichier go.mod. + incompatible indique qu'une version fait partie du même module que les versions avec des numéros de version majeurs inférieurs; par conséquent, la commande go peut automatiquement mettre à niveau vers des versions supérieures + incompatibles même si elle peut interrompre la construction.
donc je comprends que ce paquet n'a pas de go.modfichier, cependant la version téléchargée (17.x) est supérieure à 2, donc je ne pense pas que ce +incompatiblesoit le problème.
ma question est la suivante: lorsque je spécifie la version v19.03.13, pourquoi Go installe- v17.12.0-cet-il?
C'est la version que je souhaite utiliser
C'est celui qui est téléchargé
Réponses
La version répertoriée dans la go.mod pseudo-version n'a pas d'importance pour les référentiels qui ne sont pas des modules go. La version v19.03.13n'est pas une version sémantique syntaxiquement valide, donc l'outil go montera dans l'arbre de validation pour en trouver un, et le premier semver valide qu'il rencontre se trouve être v17.12.0(ce qui n'est pas destiné à être une version sémantique, mais il est au moins valide ). Le fait que la version principale ne soit pas celle attendue dans la pseudo-version n'est pas un problème tant que go lui-même peut reproduire et analyser le résultat.
Si vous regardez le hachage de validation de fin, vous avez bd33bbf0497b, qui est l'ID de validation correct pour la v19.03.13balise.