我所读到的有关供应商目录的一切都让我明白,如果我有一个目录:
$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
应该指定你的工作空间的位置,即包含src
, pkg
和bin
目录的根目录。
试着做
设置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/xyz
和godep save
在我的项目目录中。 这将在其当前提交内创建一个vendor
文件夹。