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