构建 Go 应用

指定 Go 版本

默认情况下,Go Buildpack 使用最新的稳定版 Go 编译器。如果您的应用需要使用特定版本,您可以使用 GOOGLE_GO_VERSION 环境变量提供 semver 限制条件,该限制条件将用于选择可用的 Go 版本。

pack build sample-go --builder=gcr.io/buildpacks/builder \
  --env GOOGLE_GO_VERSION="17.x.x"

编译标志

Go Buildpack 使用 go build command 将应用源代码编译为可执行文件。以下环境变量可用于配置构建行为:

  • GOOGLE_BUILDABLE 指定指向可构建单元的路径。示例:如果为 Go 指定 ./maindir,系统将以 maindir 作为根目录构建软件包。

  • GOOGLE_CLEAR_SOURCE 在应用映像中省略源代码。如果应用依赖于 Go 模板等静态文件,则设置此变量可能会导致应用出现异常行为。例如:trueTrue1 均会清除源代码。

  • GOOGLE_GOGCFLAGS 作为 -gcflags 值传递给 go buildgo run,不含任何解释。示例:all=-N -l 会启用竞态条件分析并更改源代码文件路径在二进制文件中的记录方式。

  • GOOGLE_GOLDFLAGS 作为 -ldflags 值传递给 go build 和 go run,不含任何解释。示例:-s -w 用于清理二进制文件并缩减其大小。

管理依赖项

我们建议您使用 Go 模块来管理 Go 应用中的依赖项。Go Buildpack 会使用 go build 命令来构建应用,因此与 Go 本身的行为相匹配。如需确保您的应用使用模块感知模式,您应该在应用根目录中包含 go.mod 文件。

Vendoring 依赖项

Vendoring 会将您的应用使用的软件包复制到应用目录中,而不是在构建过程中通过其源代码下载模块。Go 提供 go build 命令,以将应用所需的软件包复制到应用根目录中名为 vendor 的目录中。

配置应用入口点

默认情况下,Go Buildpack 会将应用容器条目配置为调用编译应用源代码时生成的 main 可执行文件。您可以通过提供 Procfile 或传递 GOOGLE_ENTRYPOINT 环境变量来更改这一行为。

环境变量

Go Buildpack 支持使用以下环境变量来自定义容器

GO

请参阅有关环境变量的 Go 文档

示例GOFLAGS=-flag=value 会将 -flag=value 传递给 go 命令。