首页 文章

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

提问于
浏览
0

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

/workspace
  /src
    /package1
  /vendor
    /src
      /somepackage
      /anotherpackage
      /package1

我的GOPATH设置为 /workspace;/workspace/vendor

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

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

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

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

2 回答

  • 2

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

    正因为这样的区别,我通常会推荐一个gopath用于一切 . 如果您想要供应商依赖项,我建议您为每个单独的主程序包执行此操作 .

  • 1

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

    但是你可以自由地在你想要的任何文件集上调用go编译器: go tool compile <file.go>...

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

相关问题