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 內部
部落格索引