带有bazel内置的protobuf依赖项的Google golang云功能

时间:2019-04-28 16:22:40

标签: go google-cloud-functions protocol-buffers bazel

如果我使用bazel来构建依赖于protobuf的golang无服务器功能,那么bazel将使protobuf生成的go代码在我指定的导入路径中可用。

用于go的Google云功能需要使用go模块。

如何将bazel创建的虚拟导入路径添加到go.mod文件中?部署到Google Cloud的功能失败,因为无法解析虚拟导入。 (G云要求我上传go源代码,AWS lambdas允许我上传二进制文件,这可以正常工作。)

我猜我将要么必须使用AWS lambda,要么使用无服务器容器,要么编写一个将原生成的代码的输出复制到我的源目录中的genrule,但是我想避免这种丑陋。 / p>

1 个答案:

答案 0 :(得分:0)

我在Google on Go和Google Cloud Functions工作。

我看到一些使用Cloud Functions的选项:

  • 公开发布生成的代码。出于多种原因,您可能不想这样做。
  • 将生成的代码复制到您的源目录中。这是最简单的。部署功能时,将压缩当前目录并将其发送以进行构建。我们不会从您当前目录的外部复制任何依赖项。如果执行此操作,则可以通过使软件包路径以目录的模块路径作为前缀来导入生成的代码。
  • 使用供应商。如果您运行go mod vendor并抓住了生成的代码(以您选择的任意路径),它将创建一个包含所有依赖项的vendor目录。不过,“云功能”构建器更喜欢go.mod而不是vendor。因此,您必须.gcloudignore go.modgo.sum文件,以确保在部署代码时它们不会被上传。 https://cloud.google.com/functions/docs/writing/specifying-dependencies-go有更多信息。