在 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/
目录中:
切换至您的应用目录:
cd /myapp
创建包含专用依赖项的目录:
mkdir private
确保您的专用依赖项位于
private
目录中。一种方法是创建符号链接:mkdir private/private.example.com ln -s /path/to/private.example.com/foo private/private.example.com/foo
更新
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
请勿修改导入和使用私有软件包的方式。您的
import
语句应如下所示:import "private.example.com/foo"
通过部署应用,在部署中包含您的专用依赖项:
gcloud app deploy