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 进行编译时依赖注入
博客索引