我读到的关于供应商目录的所有内容让我明白,如果我有一个目录:
$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
答案 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
应指定工作区的位置,即根目录中包含src
,pkg
和bin
目录的目录。
尝试
设置GOPATH = C:\ Users \ js \ dev \ my_project \ rest \; c:\ Users \ js \ dev \ go
答案 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
文件夹,其内部具有依赖关系。