您可以将任何与 linux/amd64 兼容的软件包用于在 App Engine 柔性环境中运行的实例。这些说明假设您使用 go get
命令直接从受支持的软件库(如 GitHub、Bitbucket、LaunchPad 等)获取软件包。
从 Go 1.22 及更高版本开始:
在旧版
GOPATH
模式 (GO111MODULE
=off
) 下,您不能在模块外部使用go get
。如需了解详情,请参阅工具。Go 建议您使用
go.mod
文件来管理依赖项。 如需在部署期间安装依赖项,请将go.mod
文件添加到app.yaml
文件所在的文件夹中。如需详细了解 Go 版本以及如何管理供应商目录的依赖项,请参阅 GOPATH 和模块。
声明和管理依赖项
Go 应用以包的形式进行组织,而这些包是源文件目录结构的镜像。使用 import 语句时,系统将解释 import 中的相对路径。有效导入路径是相对于 GOPATH
中指定的所有目录的 src
子目录的完全限定路径。
例如,请考虑以下示例应用,其中您定义了以下内容:
GOPATH
模块:export GOPATH=/home/fred/go.
src1-1.go
文件:import "foo/bar"
当您运行或部署应用时,gcloud CLI 会在
/home/fred/go/src/foo/bar
位置查找foo/bar
软件包。
如果您在 GOPATH
中添加了软件包源代码,请务必注意不要将源代码放在应用的 app.yaml
文件所在的目录中。如果出现这种情况,可能会产生比较细小的问题,因为软件包可能会被加载两次,一次从相对于服务目录的路径加载,一次从完全限定的路径加载。为避免出现问题,gcloud CLI 将同时扫描应用的目录和 GOPATH
,如果检测到冲突,则报告错误。
为获得最佳效果,我们建议您采取以下措施:
- 在应用的目录中为每个服务创建一个单独的目录。
- 每个服务的目录应包含服务的
app.yaml
文件以及一个或多个.go
文件。 - 不要在服务的目录中包含任何子目录。
- 您的
GOPATH
应指定一个应用目录之外的目录,并包含应用导入的所有依赖项。
下载所需的软件包
您可以使用 go get
命令下载软件包。例如,要从 GitHub my_repo
下载 packagename
:
go get github.com/my_repo/packagename
部署到 App Engine
如需将应用部署到 App Engine,您必须部署应用所需的库以及应用代码。 如需了解完整详情,请参阅测试和部署应用。