Godep处理自定义软件包



这是我的问题。我有Go-App使用我自己创建的一些自定义软件包。我不想在git或其他地方发布此软件包。它们只是具有一定功能的包装。

所以,我的项目文件夹看起来像这样:

|--src/github/u-mulder
  |--/project_name
       |--/Godeps  
       |--/public
       |--/vendor
       |--main.go  
       |--Procfile  

我将软件包放在vendor文件夹中:

-/Godeps  
-/public
-/vendor
  |---/github.com/u-mulder/package_one/package_one.go
  |---/github.com/u-mulder/package_two/package_two.go
-main.go  
-Procfile  

好吧,在我的main.go中,我成功地导入了此软件包:

import (
    "database/sql"
    "fmt"
    "github.com/u-mulder/package_one"
    "github.com/u-mulder/package_two"
    // more packages here    
)

一切正常。

现在,我想准备使用godep部署到Heroku的项目。因此,在我的项目的根文件夹中,我运行

> godep save ./...

这是我的问题 - 由于我的软件包已经在vendor文件夹中,因此我收到错误:

godep:package(github.com/u-mulder/package_one)找不到

当然,我可以为每个软件包创建一个项目。然后src的结构看起来像:

|--src/github/u-mulder
  |--/package_one
    |-package_one.go
  |--/package_two
    |-package_two.go
  |--/project_name
       |--/Godeps  
       |--/public
       |--/vendor
       |--main.go  
       |--Procfile  

然后上述问题已经消失,但第二个出现:

godep:检查"$GOPATH/src/github.com/u-mulder/package_one"时错误:目录"$GOPATH/src/github.com/u-mulder/package_one"不使用已知版本控制系统

所以,我当然可以在每个项目软件包中创建一个.git存储库(也许这个问题将消失),但是我不想要这些只是我使用的本地软件包。

那么,问题是 - 在哪里放置我的自定义(或说 - 本地)软件包,以便godep可以找到它们,并且不希望它们成为"真实"软件包?

我在这里找到类似的东西,但这与vendor文件夹无关。

感谢@jimb评论,我发现了以下内容:

最明显,最简单的解决方案只是

将您的依赖性保留在Gopath中,并通过版本控制,然后让Godep处理所有人(@jimb)

是的,这意味着向git和所有这些东西添加软件包。

如果您不想要/不能这样做,则行动顺序可以是:

  • 代码
  • 测试
  • vendor
  • 删除您的本地依赖(软件包)
  • 运行 godep以更新其他依赖性(例如httprouterlibpq等)
  • 手动将您的本地依赖性添加回vendor
  • 提交

但显而易见的是不是一个好方法。

最新更新