Go 1.15 现已正式发布。

在 App Engine 上构建 Go 应用

区域 ID

REGION_ID 是 Google 根据您在创建应用时选择的地区分配的缩写代码。此代码不对应于国家/地区或省,尽管某些地区 ID 可能类似于常用国家/地区代码和省代码。在 App Engine 网址中包含 REGION_ID.r 对于现有应用是可选项,但在不久后将成为所有新应用的必要项。

为了确保顺利过渡,我们正在逐步更新 App Engine 以使用地区 ID。如果我们尚未更新您的 Google Cloud 项目,则您不会看到应用的区域 ID。由于该 ID 对于现有应用是可选的,因此您在现有应用可以使用区域 ID 后无需更新网址或进行其他更改。

详细了解区域 ID

本指南可帮助您开始使用 App Engine 并熟悉 Go 应用的开发、部署和管理。

构建应用后,您可以阅读其他教程,了解如何与其他 Google Cloud 服务集成以及向应用添加更多功能。

费用

运行本指南不会产生任何相关费用。单独运行此示例应用不会超出您的免费配额

设置开发环境

您可以使用您的本地计算机,也可以使用您熟悉的工具或 Cloud Shell。Cloud Shell 有许多其他功能,并安装了 Cloud SDK,设置了您的环境。

本地机器

按照设置您的开发环境中的说明安装 Go 并设置 Cloud SDK。

Cloud Shell

启动 Cloud Shell,其中包含所有需要预安装的工具:

打开 Cloud Shell

创建 Cloud 项目

项目是使用 Google Cloud 的必要条件,也是使用所有 Google Cloud 服务的基础。

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 启用 Cloud Build API。

    启用 API

  5. 安装并初始化 Cloud SDK
  6. 创建 App Engine 应用及其相关资源。您必须选择一个位置,并且该位置以后无法更改。
    gcloud app create

为 App Engine 编写基本网络服务

了解如何编写 Web 服务并声明运行时设置。

设计文件的结构

您的服务将具有以下文件结构:

  • go-app/:Go 1.12+服务的目录。
    • app.yaml:服务的配置设置。
    • main.go:您的应用代码。

创建 app.yaml 文件

每个 App Engine 项目都有一个 app.yaml 配置文件,用于指定服务的运行时环境设置。必须具有此文件才能部署服务。

  1. 为您的 Go 1.12+服务创建名为 go-app 的新文件夹:

    mkdir go-app

  2. go-app/ 文件夹中,创建一个名为 app.yaml 的文件,并添加以下内容:

    runtime: go114 # or go112 or go113 for the Go 1.12 or Go 1.13 runtime
    

    这是 App Engine 应用的最简单配置。它向 App Engine 表明您正在使用 Go。app.yaml 文件可以指定其他 Go 版本、网络设置、扩缩设置等。如需了解详情,请参阅 app.yaml 参考文档。

创建 main.go 文件

此示例使用 net/http 软件包来创建打印“Hello,World!”的 HTTP 服务器。

要设置您的 main.go 文件,请执行以下操作:

  1. 在您的 go-app/ 文件夹中,创建一个 main.go 文件。

  2. 添加 package main 语句,以将代码视为可执行程序:

    package main
    

    要在 Go 1.12+运行时中成功部署服务,必须在至少一个 Go 源文件的开头定义 package main 语句。

  3. 导入以下软件包:

    import (
    	"fmt"
    	"log"
    	"net/http"
    	"os"
    )
    
  4. 定义 HTTP 处理程序:

    
    // indexHandler responds to requests with our greeting.
    func indexHandler(w http.ResponseWriter, r *http.Request) {
    	if r.URL.Path != "/" {
    		http.NotFound(w, r)
    		return
    	}
    	fmt.Fprint(w, "Hello, World!")
    }
    

    http.ResponseWriter 对象会组建 HTTP 服务器响应;通过向其写入数据,您可以将数据发送到浏览器。http.Request 对象是一种表示传入 HTTP 请求的数据结构。

  5. 注册 HTTP 处理程序:

    
    func main() {
    	http.HandleFunc("/", indexHandler)
    
    	port := os.Getenv("PORT")
    	if port == "" {
    		port = "8080"
    		log.Printf("Defaulting to port %s", port)
    	}
    
    	log.Printf("Listening on port %s", port)
    	if err := http.ListenAndServe(":"+port, nil); err != nil {
    		log.Fatal(err)
    	}
    }
    

    main 函数是可执行程序的入口点,因此它会启动应用。它首先会调用 http.HandleFunc 函数,该函数会指示 http 包使用 indexHandler 函数处理对网络根目录 ("/") 的所有请求。

    如果您未设置 PORT 环境变量,则会使用默认端口 8080。当您的应用在 App Engine 上运行时,系统会为您设置 PORT 环境变量,但在本地测试您的应用时,您可以将 PORT 设置为任何首选值。

在 App Engine 上部署 Web 服务

  1. app.yaml 文件所在的 go-app 目录中,使用以下命令将您的 Web 服务部署到 App Engine:

    gcloud app deploy

  2. 如需启动浏览器并在 https://PROJECT_ID.REGION_ID.r.appspot.com 查看您的 Web 服务,请运行以下命令:

    gcloud app browse

恭喜!您刚刚在 App Engine 上创建并部署了一项服务。

服务和版本

您为应用部署的第一项服务将是默认服务。您可以在 app.yaml 文件中指定服务名称,但如果省略名称,则系统会将其视为 default。您可以部署除默认服务之外的多项服务

您可以通过运行 gcloud app deploy 命令随时更新服务。每次部署时,系统都会创建一个新版本,并自动将流量路由到最新版本。

要确认服务创建和版本部署,请执行以下操作:

  1. 在 Cloud Console 中查看您的 App Engine 服务:

    查看服务

    您应该看到,其中列出了一项名为 default 的服务。您可以通过以下网址公开访问默认服务:

    https://PROJECT_ID.REGION_ID.r.appspot.com

  2. 查看您的版本:

    查看版本

    您应该会看到,系统列出了一个与您的部署相对应的带时间戳的版本。

如需了解如何将请求发送至特定服务和版本,请参阅请求的路由方式

后续步骤

恭喜!您刚刚对网络应用进行了设置并将其部署到了 App Engine!

请浏览以下页面,了解如何向应用添加其他功能: