指定依赖项

在 Go 1.11 标准运行时中运行的应用可以使用任何与 linux/amd64 兼容的软件包。

使用 Go 模块

我们建议您使用 Go 模块来管理 Go 应用的依赖项,但如果您还未准备好迁移到 Go 模块,则可以继续使用旧的 GOPATH 模式。

部署应用时,App Engine 使用 go build 命令构建应用,因此与 Go 本身的行为相匹配。如需确保您的应用使用模块感知模式,请在开发环境中执行以下操作:

  • app.yaml 文件所在的目录中创建模块的 go.mod 文件。App Engine 会搜索当前目录,然后搜索连续的父目录,直至找到 go.mod 文件

    如果 App Engine 未找到 go.mod 文件,则会遵循 GOPATH 模式。

  • 如果设置 GO111MODULE 环境变量,请确保变量的值启用模块感知模式。部署应用时,App Engine 会检查环境中的 GO111MODULE 并匹配 Go 本身的行为。 只有在为应用添加了 go.mod 文件后,App Engine 才会应用 GO111MODULE 变量设置。

  • 请勿将您的应用目录放在 $GOPATH/src 中或之下。如果您的应用位于 $GOPATH/src 目录树中的任何位置,则即使您为应用定义了 go.mod 文件,App Engine 也会遵循 GOPATH 模式。

使用专用依赖项

在构建过程中,App Engine 无法下载您的私有依赖项,因此必须在部署时将它们包含在应用代码中。

您需要在 go.mod 文件中使用 replace 指令来声明专用依赖项。以下示例假定您的应用位于 /myapp/ 目录中:

  1. 切换至您的应用目录:

    cd /myapp
    
  2. 创建包含专用依赖项的目录:

    mkdir private
    

    确保您的专用依赖项位于 private 目录中。一种方法是创建符号链接:

    mkdir private/private.example.com
    ln -s /path/to/private.example.com/foo private/private.example.com/foo
    
  3. 更新 go.mod 文件,以使用 replace 指令将 private 目录用于您的依赖项:

    go mod edit -replace=private.example.com/foo=./private/private.example.com/foo
    

    您的 go.mod 文件现在应如下所示:

    最终的 go.mod 文件

    module private.example.com/myapp
    
    require private.example.com/foo v1.2.3
    
    replace private.example.com/foo => ./private/private.example.com/foo
    

    原始的 go.mod 文件

    module private.example.com/myapp
    
    require private.example.com/foo v1.2.3
    
  4. 请勿修改导入和使用私有软件包的方式。您的 import 语句应如下所示:

    import "private.example.com/foo"
    
  5. 通过部署应用,在部署中包含您的专用依赖项:

    gcloud app deploy