Go 部落格

宣佈 App Engine 推出新的 Go 1.11 Runtime

Eno Compton and Tyler Bui-Palsulich
2018 年 10 月 16 日

App Engine 於 2011 年推出了 對 Go 的實驗性支援。在接下來的幾年裡,Go 社群顯著增長,並形成了適用於雲應用程式的慣用模式。今天,Google Cloud 正宣佈推出適用於 App Engine 標準環境的新 Go 1.11 Runtime,該 Runtime 提供了 App Engine 的所有強大功能——例如按實際使用量付費、自動擴縮容和託管基礎設施——同時支援慣用的 Go 風格。

從 Go 1.11 開始,App Engine 上的 Go 在應用程式結構、支援的程式包、context.Context 值或 HTTP 客戶端方面沒有任何限制。以您喜歡的方式編寫您的 Go 應用程式,新增一個 app.yaml 檔案,您的應用程式就可以在 App Engine 上部署了。指定依賴項說明了新 Runtime 如何支援供應商目錄(vendoring)模組(modules)(實驗性)來進行依賴項管理。

此外,結合對 Cloud Functions 對 Go 的支援(更多內容將在後續文章中介紹),App Engine 為在 Google Cloud Platform (GCP) 上執行 Go 程式碼提供了一種引人注目的方式,無需擔心底層基礎設施。

讓我們來看一個為 App Engine 建立小型應用程式的例子。在此示例中,我們假設使用基於 GOPATH 的工作流,儘管 Go 模組也支援實驗性功能

首先,在您的 GOPATH 中建立應用程式

// This server can run on App Engine.
package main

import (
    "fmt"
    "log"
    "net/http"
    "os"
)

func main() {
    port := os.Getenv("PORT")
    if port == "" {
        port = "8080"
    }
    http.HandleFunc("/", hello)

    log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}

func hello(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello, 世界"))
}

程式碼包含一個慣用的設定,用於一個響應“Hello, 世界。”的小型 HTTP 伺服器。如果您有之前的 App Engine 經驗,您會注意到不再需要呼叫 appengine.Main(),現在它是完全可選的。此外,應用程式程式碼是完全可移植的——它與您的應用程式部署所在的基礎設施沒有任何關聯。

如果您需要使用外部依賴項,可以將這些依賴項新增到 vendor 目錄或 go.mod 檔案中,新 Runtime 支援這兩種方式。

完成應用程式程式碼後,建立一個 app.yaml 檔案來指定 Runtime

runtime: go111

最後,設定您的機器並擁有一個 Google Cloud Platform 賬戶

完成所有設定後,您可以使用一個命令進行部署

gcloud app deploy

我們認為 Go 開發者會發現 App Engine 的新 Go 1.11 Runtime 是可用於執行 Go 應用程式的選項中一個激動人心的補充。這裡有免費套餐。請檢視入門指南遷移指南,並立即將應用程式部署到新 Runtime!

下一篇文章:參與 2018 年 Go 使用者調查
上一篇文章:使用 Go Cloud 的 Wire 進行編譯時依賴注入
部落格索引