Go 运行时

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

  • 1.18 版及更高版本是使用 buildpack 构建的,后者要求您在 app.yaml 文件中选择操作系统。例如,要使用 Go 1.21,您必须将 Ubuntu 22 指定为操作系统。

  • 1.15 及更低版本使用 Docker 构建。

如需查看受支持的 Go 版本及其对应的 Ubuntu 版本的完整列表,请参阅运行时支持时间表

选择 Go 版本

新运行时版本

对于 Go 运行时 1.18 版及更高版本,您必须在 app.yaml 中添加 runtime_configoperating_system 设置以指定操作系统。

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

(可选)您可以将 go.mod 文件添加到 app.yaml 文件所在的文件夹中。例如,包含 go.mod 的应用的文件夹结构必须表示为:

  <application-root>/
  --> app.yaml
  --> go.mod
  --> Other source files used in your application.

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

示例

  • 如需在 Ubuntu 22 上指定 Go 1.21,请运行以下命令:

    runtime: go
    env: flex
    
    runtime_config:
        operating_system: "ubuntu22"
        runtime_version: "1.21"
    
  • 如需在 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.21 会使 Go 1.21 的最新 patch 版本可用。

  runtime: go
  env: flex

  runtime_config:
      operating_system: "ubuntu22"
      runtime_version: "1.21"

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

过往运行时版本

对于 Go 1.15 及更早版本,您可以在 app.yaml 配置文件中使用 go1.x 格式 (runtime: go1.x) 来指定版本:

示例

  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

导入软件包

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

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

扩展运行时

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

元数据服务器

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

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