【问题标题】:go dep and go generate去 dep 去生成
【发布时间】:2021-05-29 11:07:33
【问题描述】:

如何添加自动生成的 go 依赖项?

我有一个 protobuf-repository,其根目录中有一个 go-file,其中包含以下内容:

//go:generate ./scripts/generate_go_sources.sh    
package protobuf

上述脚本遍历“message/”子文件夹中的所有.proto文件,并生成go-sources。

之后,仓库中包含了很多子包,比如

ptyes/package1/file.go
ptyes/package2/file.go

我不想将这些文件签入版本控制。

如何通过 go dep 使用此存储库?

我正在尝试切换到 go dep 进行依赖管理,但我无法说服它下载此存储库并执行“go generate”。

Solving failure: No versions of github.com/company/protobuf met constraints:
        master: Could not introduce github.com/company/protobuf@master, as it is not allowed by constraint vendoring from project github.com/company/myProject.
        develop: Could not introduce github.com/company/protobuf@develop, as it is not allowed by constraint vendoring from project github.com/company/myProject.
        vendoring: Could not introduce github.com/company/protobuf@vendoring due to multiple problematic subpackages:
        Subpackage github.com/company/protobuf/ptypes/package1 is missing. (Package is required by (root).)      
        Subpackage github.com/company/protobuf/ptypes/package2 is missing. Package is required by: (root)

go dep 发现了正确的存储库(vendoring-branch),但由于找不到所需的子包而将其丢弃。它们只有在根包中调用“go generate”时才会出现。

【问题讨论】:

  • "我如何在 go dep 中使用这个存储库?" ——你没有。 Go dep 和 go generate 是不相关的工具。让go dep 处理生成的文件的唯一方法是将它们提交给版本控制。你为什么不想这样做?
  • @Flimzy protobuf 文件也被其他语言(Java)使用,所以我无法在该存储库中提交 go-source - 我需要一个单独的存储库,将 protobuf-definitions 作为子模块.每次更改 protobuf 文件时,也需要有人更新源代码库。
  • 是的,这就是生成文件的本质。幸运的是,CI 脚本可以很容易地执行此操作(如果您愿意,甚至可以自动执行)。

标签: git go dependency-management godeps


【解决方案1】:

来自关于 migration 的 godep 文档:

dep 假设所有生成的代码都存在,并且已经提交给 来源。

因此,似乎不可能做我想做的事。解决方案是创建一个包含生成源的存储库,并确保这些源自动生成并与实际源数据(在我的情况下为原始 *.proto 文件)保持同步。

由于我无法将生成的源与源数据放在同一个存储库中,因此需要完全同步这两个存储库(相同的分支,相同的标签),以便 go dep 使用的版本在与实际的存储库,仅包含声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2014-10-21
    相关资源
    最近更新 更多