web-dev-qa-db-fra.com

go modules d'installation go outils

J'utilise les modules go comme gestion de la dépendance, et j'ai un problème pour installer quelque chose comme ceci:

go get -u github.com/go-critic/go-critic/...

le résultat ci-dessus était:

go: cannot find main module; see 'go help modules'
4
Luis.at.code

Si GO111MODULE var est to on, vous devez être dans une arborescence de répertoires de modules go initialisée pour pouvoir utiliser go get, même si vous essayez d'obtenir un tool plutôt qu'une nouvelle dependency. C'est un problème connu et très discuté:

https://github.com/golang/go/issues/27643

https://github.com/golang/go/issues/24250

https://github.com/golang/go/issues/25922

La solution, à court terme, consiste à exécuter GO111MODULE=off go get <tool>. Cela désactive explicitement la prise en charge du module, même si vous vous trouvez actuellement dans un package de module, et l'oblige à n'utiliser que votre GOPATH. 

Déterminer à long terme quelle est la meilleure solution pour prendre en charge l’installation d’outil via go get (ou une autre commande, telle que go install avec un drapeau) est un sujet de discussion en cours avec N’ayant guère abouti à un consensus. Cependant, il existe un PR open for Go 1.12 qui, s'il est accepté, permettra à go get de fonctionner simplement en dehors d'un module, même avec GO111MODULE=on set.

3
Kaedys

Avec Go 1.12 (février 2019), GO111MODULE=on go get fonctionnera.
(De numéro 24250 )

Modules

Lorsque GO111MODULE est défini sur on, la commande go prend désormais en charge les opérations prenant en charge le module en dehors d'un répertoire de module, à condition que ces opérations n'aient pas besoin de résoudre les chemins d'importation relatifs au répertoire actuel ni de modifier explicitement le fichier go.mod.
Les commandes telles que go get, go list et go mod download se comportent comme si elles se trouvaient dans un module dont les exigences étaient initialement vides.
Dans ce mode, go env GOMOD rapporte le périphérique nul du système (/dev/null ou NUL).

Les commandes go qui téléchargent et extraient des modules peuvent désormais être appelées simultanément.
Le cache de module (GOPATH/pkg/mod) doit résider dans un système de fichiers prenant en charge le verrouillage de fichier.

La directive go dans un fichier go.mod indique maintenant la version de la langue utilisée par les fichiers de ce module, et go mod tidy la définit dans la version actuelle (go 1.12) si aucune version existante n'est présente.
Si la directive go d'un module spécifie une version plus récente que la chaîne d'outils utilisée, la commande go tentera de construire les packages indépendamment et notera l'incompatibilité uniquement si cette construction échoue. 

1
VonC

Essayez cette commande GO111MODULE=on go get -u github.com/go-critic/go-critic/...

1
KibGzr