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_config
和operating_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
软件包访问元数据服务器。