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 特定版本。新名稱允許使用者在系統 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.py
和 appcfg.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
部落格索引