忽略供应商目录

时间:2016-09-02 23:42:43

标签: windows go vendor gopath

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

$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

3 个答案:

答案 0 :(得分:2)

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

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

<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="CompoundConfiguration" type="ConsoleApplication2.CompoundConfigurationSection,ConsoleApplication2,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" /> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> </startup> <CompoundConfiguration> <Compounds> <add name="Particles smaller than 10 µm, Tapered Element Oscillating Microbalance measurement" abbreviation="PM10Teom" id="161" factor="1" /> <add name="Ozone" abbreviation="O3" id="147" factor="1.9957" /> </Compounds> </CompoundConfiguration> </configuration>

答案 1 :(得分:0)

您的GOPATH似乎不正确? GOPATH应指定工作区的位置,即根目录中包含srcpkgbin目录的目录。

尝试

  

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

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

答案 2 :(得分:0)

首先要理解的是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和{{ 1}}来自我的项目目录。这将创建一个godep save文件夹,其内部具有依赖关系。