從零到一:用Go語言構建你的第一個Web服務

techlead_krischang發表於2024-08-06

使用Go語言從零開始搭建一個Web服務,包括環境搭建、路由處理、中介軟體使用、JSON和表單資料處理等關鍵步驟,提供豐富的程式碼示例。

關注TechLead,復旦博士,分享雲服務領域全維度開發技術。擁有10+年網際網路服務架構、AI產品研發經驗、團隊管理經驗,復旦機器人智慧實驗室成員,國家級大學生賽事評審專家,發表多篇SCI核心期刊學術論文,阿里雲認證的資深架構師,上億營收AI產品研發負責人。

file

環境搭建

在開始開發之前,我們需要確保本地環境已經安裝了Go語言開發環境。

安裝Go語言

可以從Go語言官網下載適合你作業系統的安裝包,並按照官網的指南進行安裝。

配置開發工具

推薦使用VS Code或GoLand進行Go語言開發。以下是VS Code的配置步驟:

  1. 安裝VS Code編輯器。
  2. 安裝Go外掛:開啟VS Code,進入外掛市場,搜尋並安裝Go外掛。
  3. 配置Go開發環境:確保Go語言的安裝路徑已新增到系統環境變數中。

建立專案結構

建立一個新的專案資料夾,並初始化Go模組。

mkdir simple-web-server
cd simple-web-server
go mod init simple-web-server

建立HTTP伺服器

我們將使用Go標準庫net/http來建立一個簡單的HTTP伺服器。

引入必要的包

在專案根目錄下建立一個名為main.go的檔案,並引入必要的包。

package main

import (
	"fmt"
	"net/http"
)

建立簡單的HTTP處理函式

我們需要建立一個處理函式來響應HTTP請求。

func helloHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello, World!")
}

建立並啟動HTTP伺服器

main函式中,我們將建立HTTP伺服器並指定埠號。

func main() {
	http.HandleFunc("/", helloHandler) // 設定路由
	fmt.Println("Starting server at port 8080")
	if err := http.ListenAndServe(":8080", nil); err != nil {
		fmt.Println("Error starting server:", err)
	}
}

完整的main.go檔案如下:

package main

import (
	"fmt"
	"net/http"
)

func helloHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello, World!")
}

func main() {
	http.HandleFunc("/", helloHandler) // 設定路由
	fmt.Println("Starting server at port 8080")
	if err := http.ListenAndServe(":8080", nil); err != nil {
		fmt.Println("Error starting server:", err)
	}
}

執行伺服器

在終端中執行以下命令來啟動伺服器:

go run main.go

開啟瀏覽器,訪問http://localhost:8080,你將看到頁面顯示“Hello, World!”。

路由與請求處理

我們將擴充套件HTTP伺服器,增加更多的路由和處理函式。

新增新的路由

新增一個新的處理函式來處理/greet路徑的請求。

func greetHandler(w http.ResponseWriter, r *http.Request) {
	name := r.URL.Query().Get("name")
	if name == "" {
		name = "Guest"
	}
	fmt.Fprintf(w, "Hello, %s!", name)
}

註冊新的路由

main函式中註冊新的路由:

func main() {
	http.HandleFunc("/", helloHandler)      // 設定根路徑路由
	http.HandleFunc("/greet", greetHandler) // 設定/greet路徑路由
	fmt.Println("Starting server at port 8080")
	if err := http.ListenAndServe(":8080", nil); err != nil {
		fmt.Println("Error starting server:", err)
	}
}

測試新的路由

重新啟動伺服器,並訪問http://localhost:8080/greet?name=Go,頁面將顯示“Hello, Go!”。

處理表單資料

我們將擴充套件伺服器以處理POST請求和表單資料。

建立HTML表單

新增一個新的處理函式來顯示HTML表單:

func formHandler(w http.ResponseWriter, r *http.Request) {
	html := `<html><body>
	<form method="POST" action="/submit">
		<label for="name">Name:</label>
		<input type="text" id="name" name="name">
		<input type="submit" value="Submit">
	</form>
	</body></html>`
	fmt.Fprintf(w, html)
}

處理表單提交

新增一個新的處理函式來處理表單提交:

func submitHandler(w http.ResponseWriter, r *http.Request) {
	if r.Method != http.MethodPost {
		http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)
		return
	}
	name := r.FormValue("name")
	fmt.Fprintf(w, "Form submitted! Hello, %s!", name)
}

註冊新的路由

main函式中註冊新的路由:

func main() {
	http.HandleFunc("/", helloHandler)      // 設定根路徑路由
	http.HandleFunc("/greet", greetHandler) // 設定/greet路徑路由
	http.HandleFunc("/form", formHandler)   // 設定/form路徑路由
	http.HandleFunc("/submit", submitHandler) // 設定/submit路徑路由
	fmt.Println("Starting server at port 8080")
	if err := http.ListenAndServe(":8080", nil); err != nil {
		fmt.Println("Error starting server:", err)
	}
}

測試表單功能

重新啟動伺服器,並訪問http://localhost:8080/form,填寫表單並提交,頁面將顯示“Form submitted! Hello, [你的名字]!”

透過以上步驟,我們已經成功建立了一個簡單的Go Web服務,並實現了路由處理和表單資料處理。

如有幫助,請多關注
TeahLead KrisChang,10+年的網際網路和人工智慧從業經驗,10年+技術和業務團隊管理經驗,同濟軟體工程本科,復旦工程管理碩士,阿里雲認證雲服務資深架構師,上億營收AI產品業務負責人。

相關文章