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 上。 指定依赖项 描述了新运行时如何支持 供应商模块(实验性)进行依赖项管理。

连同 对 Go 的 Cloud Functions 支持(以后的文章中将详细介绍),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 应用程序的可用选项中令人兴奋的补充。有一个 免费层。查看 入门指南迁移指南,并在今天将应用程序部署到新的运行时!

下一篇文章:参与 2018 年 Go 用户调查
上一篇文章:使用 Go Cloud 的 Wire 进行编译时依赖项注入
博客索引