Go 博客
在 App Engine 上运行 Go:工具、测试和并发
背景
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 特定版本。这个新名称允许用户将常规的“go”工具和“goapp”工具都保留在系统 PATH 中。
除了现有的“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.py
和 appcfg.py
的用法,尽管对于一些不太常见的用途,Python 工具仍然可用。
本地单元测试
Go App Engine SDK 现在支持本地单元测试,使用 Go 的原生testing 包和“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 高效处理并发的能力,使您的实例能够处理更多同时请求,这应该会提高实例利用率,最终减少计费的实例小时数。
结论
通过这些更改,Go 在 App Engine 上变得比以往任何时候都更方便和高效,我们希望您喜欢这些改进。请加入 google-appengine-go 小组,向工程团队和社区其他成员提问或讨论这些更改。
下一篇文章:FOSDEM 2014 上的 Go 演讲
上一篇文章:Go Playground 内部
博客索引