Go 部落格

宣佈 App Engine 全新 Go 1.11 執行時

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

App Engine 於 2011 年推出了 對 Go 的實驗性支援。在隨後的幾年裡,Go 社群顯著壯大,並形成了基於雲應用程式的習慣用法模式。今天,Google Cloud 宣佈 為 App Engine 標準環境推出全新的 Go 1.11 執行時,它提供了 App Engine 的所有強大功能——例如按使用量付費、自動擴縮和託管基礎設施——同時支援符合 Go 習慣用法的程式碼。

從 Go 1.11 開始,App Engine 上的 Go 對應用程式結構、支援的包、context.Context 值或 HTTP 客戶端沒有任何限制。您可以按照自己喜歡的方式編寫 Go 應用程式,新增一個 app.yaml 檔案,您的應用程式就可以部署到 App Engine 上了。指定依賴項 描述了新執行時如何支援 vendor 目錄模組(實驗性)進行依賴項管理。

除了 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, 世界"))
}

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

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

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

runtime: go111

最後,在您的機器上設定 Google Cloud Platform 賬戶

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

gcloud app deploy

我們認為 Go 開發者會發現新的 App Engine Go 1.11 執行時是一個令人興奮的選擇,豐富了執行 Go 應用程式的方式。App Engine 提供 免費套餐。請查閱 入門指南遷移指南,立即將您的應用部署到新的執行時!

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