使用Bazel构建包含.proto
个文件的项目时,我们可以使用go_binary
和go_proto_library
规则来创建二进制文件。生成的二进制文件将按预期工作,但从.proto
文件生成的代码不在工作目录中。
因此,编辑器和IDE中的代码完成将不起作用。更糟糕的是,他们经常会打印有关无效导入语句的错误。
这是使用协议缓冲区的示例,但可能还有其他类似情况,例如使用第三方依赖项。
这通常如何处理?
答案 0 :(得分:1)
我是为Bazel制定Go规则的工程师之一。不幸的是,我现在没有给你一个好的答案,但这个问题在我们的雷达上,Go团队正在研究一般的长期解决方案。我已经在我们的GitHub回购中提交了bazelbuild/rules_go#512来跟踪这个问题,当我们有更好的解决方案时,我会更新这个答案。
问题是Bazel将生成的代码和其他工件存储在编辑器不知道的内部目录中。我们正在设计和构建一个新的工作空间抽象机制,允许工具(编辑器,IDE,像guru这样的工具)理解存储库中的所有源,生成的文件,包,导入和其他元数据,而无需直接与Bazel集成或其他构建系统。
作为临时解决方法,请尝试使用protoc手动生成.pb.go文件。您可以将这些文件检入存储库,但不要将它们包含在BUILD文件中。这应该使编辑者和IDE了解生成的文件,但是在编译时你仍然会生成新的最新版本。
答案 1 :(得分:0)
我也遇到了Buck的同一问题,并实现了workaround以便Buck将生成的代码复制到vendor
文件夹中。
尽管期待Go中的工作空间抽象机制。