去忽略供应商目录

我所读到的有关供应商目录的一切都让我明白,如果我有一个目录:

$GOPATH/src/vendor 

把我的依赖关系放在那里(我正在使用godeps),当go run ,应该首先检查那个目录。

如果我在我有一个Docker镜像中运行我的代码,这工作正常。 不过,现在我尝试在Windows机器上运行相同的代码,只是忽略vendor/目录,并找不到依赖关系。

我究竟做错了什么?

 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 

当我尝试做的时候是输出:

 go run main.go 

目录vendor/存在于此目录中。

 go version go1.7 windows/amd64 

我运行的确切命令(在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 <DIR> vendor > go run main.go 

这不起作用的原因是你不应该把任何代码直接放到$GOPATH/src/目录中。

解决的办法是把你的项目放到一个子目录中,像这样:

$GOPATH/src/app/*.go

似乎你的GOPATH不正确? GOPATH应该指定你的工作空间的位置,即包含srcpkgbin目录的根目录。

试着做

设置GOPATH = C:\ Users \ js \ dev \ my_project \ rest \; c:\ Users \ js \ dev \ go

更多细节请参见: https : //golang.org/doc/code.html

首先要理解的是, godep save只是将依赖关系从$GOPATH复制到项目中的vendor目录。

你将不得不go get你的依赖关系。 在$GOPATH获得它们之后,可以执行godep save以将当前版本复制到项目中,并确保即使$GOPATH的版本发生更改,您的项目中也会有一个固定的版本,直到您明确地更改为止通过godep

所以,如果我有一个$ GOPATH的/home/me/go_workspace和一个名为$GOPATH/src/github.com/project_x的依赖github.com/you/xyz ,那么我会去做go get github.com/you/xyzgodep save在我的项目目录中。 这将在其当前提交内创建一个vendor文件夹。