Go 博客
宣布 App Engine 推出新的 Go 1.11 Runtime
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 进行编译时依赖注入
博客索引