golang从两个不同的文件位置编译相同的包

时间:2015-10-26 23:22:33

标签: go

我的项目结构方式类似于以下

/workspace;/workspace/vendor

我的GOPATH设为{{1}}

请注意,这不是使用go 1.5供应商选项。

到目前为止,所有内容都已在编译和开发工作流程中正常运行。 我现在处于一种情况,我想将库导入供应商目录workspace / vendor / src / package1,但在workspace / src / package1目录中编写一些单元测试。

当测试运行时,它无法从供应商目录中的package1中找到方法。

有没有办法让供应商包代码被识别到同一个名称空间中?

2 个答案:

答案 0 :(得分:2)

您是否要求在两个不同的gopath中的两个文件夹之间基本上“拆分”包的代码? go工具无法执行此操作,因为它会在gopath中的任何文件夹中找到它找到的第一个文件夹。如果你正在积极研究一个项目,为什么它会进入供应商的gopath而不是src呢?

正是因为这样的区别所以我一般都会推荐一个gopath。如果您想要供应商依赖项,我建议您为每个主要软件包执行此操作。

答案 1 :(得分:1)

正如captncraig所说:go工具无法做到这一点。

但您可以随意在任何一组文件上调用go编译器:go tool compile <file.go>...

当然这会重新引入某种Makefile风格的构建系统。这是可行的,但go buildgo install完成的所有繁重工作都将丢失,并且必须存在于您的Makefile中。