指定依赖项

您可以将任何与 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,您必须部署应用所需的库以及应用代码。 如需了解完整详情,请参阅测试和部署应用