Go 博客

在 App Engine 上使用 Go:工具、测试和并发

Andrew Gerrand 和 Johan Euphrosine
2013 年 12 月 13 日

背景

当我们在 2011 年 5 月 为 App Engine 发布 Go 时,SDK 只是 Python SDK 的修改版本。当时,没有规范的方法来构建或组织 Go 程序,因此采用 Python 方法是有意义的。从那时起,Go 1.0 发布了,包括 go 工具 和组织 Go 程序的 约定

2013 年 1 月,我们宣布 更好地集成 Go App Engine SDK 和 go 工具,促进了在 App Engine 应用中使用传统的导入路径,并使使用“go get”获取应用依赖项成为可能。

随着最近发布的 App Engine 1.8.8,我们很高兴地宣布对 App Engine 上 Go 的开发人员体验进行更多改进。

goapp 工具

Go App Engine SDK 现在包括“goapp”工具,它是“go”工具的 App Engine 特定版本。“goapp”的新名称允许用户在系统 PATH 中保留常规的“go”工具和“goapp”工具。

除了现有的“go”工具 命令 外,“goapp”工具还提供了用于处理 App Engine 应用的新命令。“goapp serve”命令启动本地开发服务器,而“goapp deploy”命令将应用上传到 App Engine。

“goapp serve”和“goapp deploy”命令提供的主要优势是简化的用户界面以及与“go get”和“go fmt”等现有命令的一致性。例如,要运行当前目录中应用的本地实例,请运行

$ goapp serve

要将其上传到 App Engine

$ goapp deploy

您也可以指定要服务或部署的 Go 导入路径

$ goapp serve github.com/user/myapp

您甚至可以指定一个 YAML 文件来服务或部署特定的 模块

$ goapp deploy mymodule.yaml

这些命令可以替代大多数 dev_appserver.pyappcfg.py 的用法,尽管 Python 工具仍然可用于它们不常用的用法。

本地单元测试

Go App Engine SDK 现在支持本地单元测试,使用 Go 的原生 测试包 和“go test”命令(由 SDK 提供为“goapp test”)。

此外,您现在可以编写使用 App Engine 服务的测试。aetest 包 提供一个 appengine.Context 值,它将请求委托给开发服务器的临时实例。

有关使用“goapp test”和 aetest 包的更多信息,请参阅 Go 的本地单元测试文档。请注意,aetest 包仍处于早期阶段;我们希望随着时间的推移添加更多功能。

更好的并发支持

现在可以通过设置 max_concurrent_requests 选项(仅适用于 自动扩展模块)来配置应用的每个动态实例所服务的并发请求数。

这是一个示例 app.yaml 文件

application: maxigopher
version: 1
runtime: go
api_version: go1
automatic_scaling:
  max_concurrent_requests: 100

这将应用的每个实例配置为同时服务最多 100 个请求(从默认的 10 个增加)。您可以将 Go 实例配置为最多服务 500 个并发请求。

此设置允许您的实例通过利用 Go 对并发的有效处理来处理更多同时请求,这应该会产生更好的实例利用率,并最终减少可计费的实例小时数。

结论

通过这些更改,App Engine 上的 Go 比以往任何时候都更加便捷和高效,我们希望您喜欢这些改进。请加入 google-appengine-go 组 以提出问题或与工程团队和社区的其他成员讨论这些更改。

下一篇文章: FOSDEM 2014 上的 Go 演讲
上一篇文章: 深入 Go Playground
博客索引