访问 700 多个实验和课程

以 Go 語言建構 HTTP Google Cloud Run 函式

实验 45 分钟 universal_currency_alt 1 积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

GSP602

Google Cloud 自學實驗室標誌

總覽

Go 是開放原始碼程式設計語言,可以輕鬆建構簡單、可靠且有效率的軟體。Cloud Shell 已預先安裝 Go。

Cloud Run functions 是用來建構及連結雲端服務的無伺服器執行環境。有了 Cloud Run functions,即可編寫專屬用途的函式,並連結到雲端基礎架構和服務產生的事件。一旦監控的事件發生,就會觸發函式。程式碼會在 Cloud Run 的全代管環境中執行,因此您不須佈建任何基礎架構,也不必管理任何伺服器。

您可以使用支援的程式設計語言編寫 Cloud Run 函式。函式能在支援語言的標準執行階段環境中執行,可攜性和本機測試的便利度都大大提升。

在本實驗室中,您將使用 Go 語言自行建立 Cloud Run 函式,只要透過 HTTP 叫用此函式,就會顯示 Renee French 設計的 Go Gopher 圖片。

課程內容

  • 用 Go 語言編寫 HTTP Cloud Run 函式。
  • 測試以 Go 語言編寫的 HTTP Cloud Run 函式。
  • 執行本機 Go HTTP 伺服器來測試函式。

Go Gopher 吉祥物

事前準備

本實驗室假設您已熟悉 Go 語言,雖然課程中會提供 Go 程式碼的說明,但對於 Go 語言初學者來說,這類說明可能不夠詳細。

設定和需求

瞭解以下事項後,再點選「Start Lab」按鈕

請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。

您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。

為了順利完成這個實驗室,請先確認:

  • 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
  • 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。

如何開始研究室及登入 Google Cloud 控制台

  1. 點選「Start Lab」按鈕。如果實驗室會產生費用,畫面上會出現選擇付款方式的對話方塊。左側的「Lab Details」窗格會顯示下列項目:

    • 「Open Google Cloud console」按鈕
    • 剩餘時間
    • 必須在這個研究室中使用的臨時憑證
    • 完成這個實驗室所需的其他資訊 (如有)
  2. 點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」

    接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。

    提示:您可以在不同的視窗中並排開啟分頁。

    注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」
  3. 如有必要,請將下方的 Username 貼到「登入」對話方塊。

    {{{user_0.username | "Username"}}}

    您也可以在「Lab Details」窗格找到 Username。

  4. 點選「下一步」

  5. 複製下方的 Password,並貼到「歡迎使用」對話方塊。

    {{{user_0.password | "Password"}}}

    您也可以在「Lab Details」窗格找到 Password。

  6. 點選「下一步」

    重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。 注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
  7. 按過後續的所有頁面:

    • 接受條款及細則。
    • 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
    • 請勿申請免費試用。

Google Cloud 控制台稍後會在這個分頁開啟。

注意:如要使用 Google Cloud 產品和服務,請點選「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。「導覽選單」圖示和搜尋欄位

啟動 Cloud Shell

Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。

  1. 點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示 「啟動 Cloud Shell」圖示

  2. 系統顯示視窗時,請按照下列步驟操作:

    • 繼續操作 Cloud Shell 視窗。
    • 授權 Cloud Shell 使用您的憑證發出 Google Cloud API 呼叫。

連線建立完成即代表已通過驗證,而且專案已設為您的 Project_ID。輸出內容中有一行文字,宣告本工作階段的 Project_ID

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。

  1. (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
  1. 點按「授權」

輸出內容:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project

輸出內容:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需 gcloud 的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南

設定區域和可用區

某些 Compute Engine 資源位於區域和可用區。「區域」是您可以執行資源的特定地理位置,每個區域中會有一或多個「可用區」。

請在 Cloud Shell 執行下列 gcloud 指令,設定實驗室的預設區域和可用區:

gcloud config set compute/zone "{{{project_0.default_zone|ZONE}}}" export ZONE=$(gcloud config get compute/zone) gcloud config set compute/region "{{{project_0.default_region|REGION}}}" export REGION=$(gcloud config get compute/region)

確認已啟用 Cloud Run functions API

  • 在 Cloud Shell 執行下列指令,啟用 Cloud Run functions API。這樣您之後就能在實驗室部署 Cloud Run 函式。
gcloud services enable cloudfunctions.googleapis.com

下載並設定程式碼

  1. 在 Cloud Shell 終端機執行 curl 指令,下載內含本實驗室程式碼的 ZIP 檔案:
curl -LO https://github.com/GoogleCloudPlatform/golang-samples/archive/main.zip
  1. 執行 unzip 指令,解壓縮程式碼。這項操作會解壓縮一個目錄 (golang-samples-main),當中包含 cloud.google.com 的 Go 程式碼範例:
unzip main.zip
  1. 切換至包含本實驗室程式碼的目錄:
cd golang-samples-main/functions/codelabs/gopher

gopher 目錄包含下列目錄和檔案:

$ tree . ├── cmd │ └── main.go # Binary to run the function locally. ├── go.mod # Go module definition. ├── gophercolor.png # The gopher! ├── gopher.go # Go file with the function. └── gopher_test.go # Go test file.

工作 1:Go 語言的 HTTP Cloud Run 函式簡介

在 Go 語言中,HTTP Cloud Run 函式會以 http.HandlerFunc 的形式編寫,這是 Go 標準程式庫中定義的介面。這個函式必須:

  • 可引用,即其他套件可以使用此函式,並以開頭為大寫字母的名稱來表示。
  • 符合 http.HandlerFunc 類型,即函式格式為 func(http.ResponseWriter, *http.Request)。請參閱「Writing Web Applications」(編寫網頁應用程式) 教學課程,深入瞭解如何以 Go 語言編寫完整網頁應用程式。

舉例來說,以下是「Hello, world」函式:

package gopher import ( "fmt" "net/http" ) // HelloWorld prints "Hello, world." func HelloWorld(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, world.") } 備註:您可以在 Cloud Shell 編輯器開啟這個檔案 (點按「開啟編輯器」),然後在左側的檔案樹狀結構開啟 golang-samples-main/functions/codelabs/gopher/hello.go 檔案。

將函式部署為 HTTP Cloud Run 函式

  1. functions/codelabs/gopher 目錄中,您可以執行 gcloud functions deploy,部署函式名稱:
gcloud functions deploy HelloWorld --gen2 --runtime go123 --trigger-http --region {{{project_0.default_region | REGION}}}
  1. 系統詢問是否允許未經驗證就叫用新函式時,請輸入 Y

這項作業可能需要 1 到 2 分鐘才能完成。

輸出內容:

Deploying function (may take a while - up to 2 minutes)...done. availableMemoryMb: 256 entryPoint: HelloWorld httpsTrigger: url: https://region-my-project.cloudfunctions.net/HelloWorld ...

點選「Check my progress」,確認目標已達成。 建立 HelloWorld HTTP Cloud Run 函式

注意:如果部署過程中發生錯誤,請確認下列事項:

  • 是否已啟用 Cloud Run functions API?如果沒有,系統會顯示錯誤訊息和啟用連結。您也可以用 gcloud services enable cloudfunctions.googleapis.com 指令來啟用。
  • 確認工作目錄 (執行 gcloud 的目錄) 包含 .go 檔案。您可以執行 cd golang-samples/functions/codelabs/gopher 來變更目錄。
  • 函式名稱是否正確?名稱應為 HelloWorld,也就是您要部署的 Go 函式名稱。
  • 如果仍發生權限遭拒錯誤,請過幾分鐘後再試一次。
  • 部署完成後,如果存取已部署的網址時發生 **403 Forbidden** 錯誤,請執行下列指令,授予函式公開存取權: gcloud functions add-iam-policy-binding HelloWorld \ --member="allUsers" \ --role="roles/cloudfunctions.invoker" \ --region= 套用這項 IAM 政策繫結後,請執行先前的部署指令,重新部署函式。
  1. 複製輸出內容中顯示的 httpsTrigger 網址。內容應該會類似這樣:
https://<REGION>-$GOOGLE_CLOUD_PROJECT.cloudfunctions.net/HelloWorld
  1. 執行 curl 指令,連至上一個輸出內容中的網址,測試 HelloWorld 函式:
curl https://<REGION>-$GOOGLE_CLOUD_PROJECT.cloudfunctions.net/HelloWorld

輸出內容:

Hello, world.

您已成功編寫並部署 HTTP Cloud Run 函式!

工作 2:編寫 Gopher HTTP Cloud Run 函式

現在,為了讓「Hello, world」函式更有趣,我們希望每次收到要求時都顯示 Gopher 圖片。

Go Gopher 吉祥物

下列程式碼區塊示範如何達成此目標。您可以在 Cloud Shell 的 golang-samples-master/functions/codelabs/gopher/gopher.go 查看這段程式碼。

// Package gopher contains an HTTP function that shows a gopher. package gopher import ( "fmt" "io" "net/http" "os" ) // Gopher prints a gopher. func Gopher(w http.ResponseWriter, r *http.Request) { // Read the gopher image file. f, err := os.Open("gophercolor.png") if err != nil { http.Error(w, fmt.Sprintf("Error reading file: %v", err), http.StatusInternalServerError) return } defer f.Close() // Write the gopher image to the response writer. if _, err := io.Copy(w, f); err != nil { http.Error(w, fmt.Sprintf("Error writing response: %v", err), http.StatusInternalServerError) } w.Header().Add("Content-Type", "image/png") }
  • 檔案開頭是套件宣告和註解。所有 Go 程式碼都寫在套件內,頂端會有類似的宣告。

  • import 程式碼區塊包含這個檔案所依附的其他套件清單。檔案其餘部分會使用這些套件的名稱來參照。舉例來說,如要使用 http 套件中的 ResponseWriter 類型,請寫入 http.ResponseWriter

  • 接著是 Gopher 函式宣告。

  • 函式會先使用 os.Open 函式讀取 gophercolor.png 檔案 (請參閱程式碼範例)。

  • 接著檢查讀取檔案時是否發生錯誤,這可能是因為檔案已毀損,或是上傳時不小心遺漏了檔案。

  • 它會使用 io.Copy 將 gopher 圖片複製到 w,也就是 http.ResponseWriter 引數。寫入 w 的所有內容都會在 HTTP 回應中傳送。

  • 如果寫入回覆時沒有發生錯誤,函式會正常傳回。

  1. 照著先前部署「Hello, world」函式的方式,執行 gcloud functions deploy 指令並加上函式名稱 Gopher,就能部署這個函式:
gcloud functions deploy Gopher --gen2 --runtime go123 --trigger-http --region {{{project_0.default_region | REGION}}}
  1. 系統詢問是否允許未經驗證就叫用新函式時,請輸入 Y

  2. 前往上一個指令輸出內容中的函式網址,並測試函式。如果成功,就會在瀏覽器中看到 Gopher!

接下來我們要新增測試,確認函式持續運作。

點選「Check my progress」,確認目標已達成。 建立 Gopher HTTP Cloud Run 函式

工作 3:編寫測試

在 Go 語言中,HTTP Cloud Run 函式須使用標準程式庫的 testinghttptest 套件進行測試。您不必執行模擬器或透過其他模擬作業來測試函式,只要使用一般的 Go 程式碼即可。

以下是 Gopher 函式的測試範例:

package gopher import ( "net/http" "net/http/httptest" "testing" ) func TestGopher(t *testing.T) { rr := httptest.NewRecorder() req := httptest.NewRequest("GET", "/", nil) Gopher(rr, req) if rr.Result().StatusCode != http.StatusOK { t.Errorf("Gopher StatusCode = %v, want %v", rr.Result().StatusCode, http.StatusOK) } }
  • Go 測試的撰寫方式與其他 Go 檔案相同,都是以套件宣告和匯入集合開頭。
  • 測試宣告的格式為 func MyTest(t *testing.T)。這個函式必須可被引用,並接收 *testing.T 類型的一個引數。
  • 測試會使用 httptest 套件建立測試回應和要求值。
  • 也會呼叫 Gopher 函式。
  • 叫用 Gopher 函式後,測試會檢查 HTTP 回應代碼,確保沒有錯誤。
  1. 執行 cd 指令,切換至含有測試檔案的目錄,即可在本機執行測試:
cd ~/golang-samples-main/functions/codelabs/gopher
  1. golang-samples-main/functions/codelabs/gopher 目錄中,執行 go test 指令:
go test -v

輸出內容:

=== RUN TestGopher --- PASS: TestGopher (0.03s) PASS ok github.com/GoogleCloudPlatform/golang-samples/functions/codelabs/gopher 0.037s 注意:測試未順利完成嗎?

  • 請查看錯誤訊息,看看是否有任何實用指引。
  • 您是否位於 gopher.gogopher_test.go 檔案所在的目錄 (golang-samples-main/functions/codelabs/gopher)?

接著,您將建立二進位檔 (Go 語言的 package main) 並於本機執行函式,然後在瀏覽器中測試。

工作 4:在本機執行函式

如要在本機執行 HTTP 函式,請建立 HTTP 伺服器,並將函式註冊為處理常式。請參閱「Writing Web Applications」(編寫網頁應用程式) 教學課程,深入瞭解如何以 Go 語言編寫完整網頁應用程式。

您可以在函式的子目錄中,為函式編寫 HTTP 伺服器。

依 Go 語言慣例,請將該目錄命名為 cmd,並在當中建立 main.go 檔案。

// The cmd command starts an HTTP server. package main import ( "fmt" "log" "net/http" "github.com/GoogleCloudPlatform/golang-samples/functions/codelabs/gopher" ) func main() { http.HandleFunc("/", gopher.Gopher) fmt.Println("Listening on localhost:8080") log.Fatal(http.ListenAndServe(":8080", nil)) }
  • 這個檔案使用 package main 做為套件。main 套件會建構為可執行的二進位檔。
  • 這個檔案會根據與函式檔案同目錄的 go.mod 檔案中的 module 行,匯入 github.com/GoogleCloudPlatform/golang-samples/functions/codelabs/gopher。編寫自己的函式時,您可以隨意命名模組。
  • func main() 是二進位檔的進入點,會將 gopher.Gopher 函式註冊為 HTTP 處理常式,然後使用 http.ListenAndServe 啟動伺服器。
  1. 執行下列指令,在本機建構及執行這個二進位檔:
go123MODULES=on # Turn on Go modules. go build -o start ./cmd ./start

輸出內容:

Listening on localhost:8080
  1. 由於函式會從目前的工作目錄載入 gophercolor.png 圖片,因此您必須從 gophercolor.png 檔案所在的目錄啟動二進位檔。-o start 旗標表示將輸出的二進位檔命名為 start./cmd 表示要建構位於 cmd 目錄中的二進位檔。

  2. 現在請使用 Cloud Shell 網頁預覽功能,在瀏覽器中測試伺服器。

  • 點按「網頁預覽」按鈕 網頁預覽圖示
  • 在隨即顯示的選單中選取通訊埠 8080

接著 Cloud Shell 就會在新的瀏覽器視窗中,開啟相關 Proxy 服務的預覽網址。網頁預覽功能會限制存取權,只有在您的使用者帳戶透過 HTTPS 連線時才能存取。

如果一切運作正常,應該就會看到 Go Gopher!

注意:沒看到 Gopher 嗎?

  • 您是否位於 gopher.gogopher_test.go 檔案所在的目錄 (golang-samples-main/functions/codelabs/gopher)?
  • 伺服器啟動了嗎?請務必執行 go build -o start ./cmd 指令來建構伺服器,然後執行 ./start 指令來啟動。畫面上應該會顯示 Listening on localhost:8080
  • 開啟網頁預覽時,是否選取了正確的通訊埠?請務必使用伺服器監聽的通訊埠 8080

工作 5:清除所用資源

結束本實驗室時,所用資源會全數刪除。使用自己的環境時,請務必移除額外資源來節省成本,當個優質的雲端使用者。

  1. 按下 CTRL+C,停止提供網址。

  2. 測試完 Cloud Run 函式後,請執行 gcloud 指令來刪除函式:

gcloud functions delete Gopher --region {{{project_0.default_region | REGION}}} gcloud functions delete HelloWorld --region {{{project_0.default_region | REGION}}}

您也能透過控制台刪除函式。

恭喜!

您已瞭解如何使用 Go 語言編寫 Cloud Run 函式了!在本實驗室中,您學會以 Go 語言編寫 HTTP Cloud Run 函式、測試函式,以及在本機執行函式。

Google Cloud 教育訓練與認證

協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。

使用手冊上次更新日期:2025 年 9 月 25 日

實驗室上次測試日期:2025 年 9 月 25 日

Copyright 2025 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

針對本實驗室提供意見回饋

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

请使用无痕模式或无痕式浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。