Go 1.14 现已正式发布。

在 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. 在开发环境中输入以下命令来创建新项目:

    gcloud projects create PROJECT_ID

  2. 创建 App Engine 应用及其相关资源。您必须选择一个位置,此位置以后无法更改。

    gcloud app create

  3. 确保您的应用已启用结算功能,以便在 App Engine 上部署。只运行此示例应用不会超出您的免费配额

    了解如何启用结算功能

为 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 1.12。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!

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