3

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

$GOPATH/src/vendor

并将我的依赖项放在那里(我正在使用godeps),在执行时go run,应该先检查该目录。

如果我在我拥有的 Docker 映像中运行我的代码,这很好。然而,现在我尝试在我的 Windows 机器上运行相同的代码,go 只是忽略了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
4

3 回答 3

4

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

解决方案是将您的项目放入一个子目录,如下所示:

$GOPATH/src/app/*.go

于 2016-09-07T21:23:14.953 回答
1

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

尝试做

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

更多详情请访问:https ://golang.org/doc/code.html

于 2016-09-03T00:03:58.080 回答
0

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

您将必须go get首先依赖您的依赖项。将它们放入 后$GOPATH,您可以godep save将当前版本复制到您的项目中,并确保即使版本$GOPATH更改,您的项目中也会有一个固定版本,直到您通过godep.

因此,如果我有一个 $GOPATH ,并且有一个依赖于/home/me/go_workspace的项目调用,那么我会在我的项目目录中执行, 。这将在其当前提交中创建一个包含依赖项的文件夹。$GOPATH/src/github.com/project_xgithub.com/you/xyzgo get github.com/you/xyzgodep savevendor

于 2016-09-03T00:13:40.567 回答