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.