aller ignorer le répertoire du fournisseur

Tout ce que je lis sur l’annuaire du fournisseur me permet de comprendre que si j’ai un répertoire:

$GOPATH/src/vendor 

Et y mettre mes dépendances (j’utilise des godeps), lorsque go run , allez d’abord vérifier dans ce répertoire.

Si je lance mon code dans une image Docker, cela fonctionne bien. Cependant, maintenant que j’essaie d’exécuter le même code sur ma machine Windows, ignorez simplement le répertoire vendor/ et ne parvient pas à trouver les dépendances.

Qu’est-ce que je fais mal?

 main.go:7:2: cannot find package "gopkg.in/alecthomas/kingpin.v2" in any of: C:\Go\src\gopkg.in\alecthomas\kingpin.v2 (from $GOROOT) C:\Users\js\dev\my_project\rest\src\gopkg.in\alecthomas\kingpin.v2 (from $GOPATH) C:\Users\js\dev\go\src\gopkg.in\alecthomas\kingpin.v2 

Est-ce que la sortie lorsque j’essaye de faire:

 go run main.go 

Un vendor/ répertoire existe dans ce répertoire.

 go version go1.7 windows/amd64 

Les commandes exactes que je lance (dans windows cmd.exe)

 > cd C:\Users\js\dev\my_project\rest\ > set GOPATH=C:\Users\js\dev\my_project\rest\;c:\Users\js\dev\go > cd src > dir ... 2016-09-01 23:20 2 923 main.go ... 2016-09-03 01:27  vendor > go run main.go 

La raison pour laquelle cela n’a pas fonctionné est que vous n’êtes pas censé mettre du code directement dans le $GOPATH/src/ .

La solution consiste à placer votre projet dans un sous-répertoire comme celui-ci:

$GOPATH/src/app/*.go

Semble que votre GOPATH est incorrect? GOPATH devrait spécifier l’emplacement de votre espace de travail, c’est-à-dire le répertoire contenant les répertoires src , pkg et bin à sa racine.

Essayez de faire

set GOPATH = C: \ Users \ js \ dev \ mon_projet \ rest \; c: \ Users \ js \ dev \ go

Plus de détails sur: https://golang.org/doc/code.html

La première chose à comprendre est que godep save est simplement en godep save copier les dépendances de votre $GOPATH vers un répertoire de vendor dans votre projet.

Vous devrez d’abord go get vos dépendances. Une fois que vous les avez dans $GOPATH , vous pouvez faire une godep save pour copier la version actuelle dans votre projet et être assuré que même si la version de $GOPATH change, vous aurez une version fixe dans votre projet jusqu’à ce que vous la $GOPATH explicitement. via godep .

Donc, si j’ai un $ GOPATH de /home/me/go_workspace et un projet appelé $GOPATH/src/github.com/project_x avec une dépendance de github.com/you/xyz , alors go get github.com/you/xyz et godep save depuis mon répertoire de projet. Cela créerait un dossier de vendor avec la dépendance à sa validation actuelle à l’intérieur.