Go 运行时

Go 运行时是负责安装应用代码和依赖项,然后在柔性环境中运行该应用的软件栈。

Go 版本

Go 1.23(预览版)使用 buildpacks。如需查看受支持的 Go 版本及其对应 Ubuntu 版本的完整列表,请参阅运行时支持时间表

如需使用支持的 Go 版本,您必须:

  • 安装 gcloud CLI 420.0.0 版或更高版本。您可以通过运行 gcloud components update 命令来更新 CLI 工具。如需查看已安装的版本,您可以运行 gcloud version 命令。

  • Go 建议您使用 go.mod 文件来管理依赖项。如需在部署期间安装依赖项,请将 go.mod 文件添加到 app.yaml 文件所在的文件夹中。

    例如,包含 go.mod 的应用的文件夹结构必须表示为:

    <application-root>/
    --> app.yaml
    --> go.mod
    --> Other source files used in your application.
    
    
  • runtime_configoperating_system 设置添加到 app.yaml 文件中以指定操作系统。

  • (可选)您可以通过在 app.yaml 中添加 runtime_version 设置来指定运行时版本。默认情况下,如果未指定 runtime_version 设置,则使用最新的 Go 版本。

示例

  • 如需在 Ubuntu 22 上指定 Go 1.23(预览版),请运行以下命令:

    runtime: go
    env: flex
    
    runtime_config:
        operating_system: "ubuntu22"
        runtime_version: "1.23"
    
  • 如需在 Ubuntu 22 上指定受支持的最新 Go 版本,请运行以下命令:

      runtime: go
      env: flex
    
      runtime_config:
          operating_system: "ubuntu22"
    

您的应用会使用 app.yaml 文件中指定的最新稳定版本。App Engine 会自动更新到新的补丁修订版本,但不会自动更新主要版本。

例如,您的应用可能部署在 Go 1.18.10,并在之后自动更新到 Go 1.18.11,但不会自动更新到主要版本 Go 1.19。

app.yaml 文件中选择 Go 1.23(预览版)会使 Go 1.23(预览版)的最新 patch 版本可用。

  runtime: go
  env: flex

  runtime_config:
      operating_system: "ubuntu22"
      runtime_version: "1.23"

如需了解详情,请参阅 app.yaml 参考文档。

过往运行时版本

如需使用 Go 1.15 版及更早版本,请在 app.yaml 文件中,使用 go1.x 格式通过 runtime 设置指定版本。例如:

  runtime: go1.14
  env: flex

如果未指定版本,则系统会自动选择默认版本 go1.11

您的应用会使用 app.yaml 文件中指定的最新稳定版本。App Engine 会自动更新到新的补丁修订版本,但不会自动更新主要版本。

例如,您的应用可能部署在 Go 1.14.10,并在之后自动更新到 Go 1.14.11,但不会自动更新到主要版本 Go 1.15。

app.yaml 文件中选择 Go 运行时版本 go1.15 会使最新 1.15 版本可用,例如 1.15.15。

  runtime: go1.15
  env: flex

对其他 Go 运行时的支持

如果您需要使用不受支持的 Go 版本,可以创建自定义运行时,并选择带有所需 Go 版本的有效基础映像。

对于 Google 提供的基础映像或 Docker Go 基础映像,请参阅构建自定义运行时

导入软件包

代码会在将应用部署到 App Engine 时进行编译。当您运行部署命令时,系统会先从本地 GOPATH 收集应用的依赖项,然后再将它们全部发送到构建服务器。如果缺少任何依赖项(例如第三方库),都将导致构建失败。

为了避免构建失败并确保应用的所有依赖项都与代码一起部署,您应该先在本地测试应用,再进行部署

扩展运行时

如需有关如何扩展和自定义 Go 运行时的说明,请参阅 GitHub 上的 Go 运行时构建器

元数据服务器

应用的每个实例都可以使用 Compute Engine 元数据服务器来查询有关实例的信息,包括实例的主机名、外部 IP 地址、实例 ID、自定义元数据和服务账号信息。App Engine 不允许为每个实例设置自定义元数据,但您可以设置项目级的自定义元数据,并从 App Engine 和 Compute Engine 实例中读取这些元数据。

您可以使用 cloud.google.com/go/compute/metadata 软件包访问元数据服务器。