使用Go語言從零開始搭建一個Web服務,包括環境搭建、路由處理、中介軟體使用、JSON和表單資料處理等關鍵步驟,提供豐富的程式碼示例。
關注TechLead,復旦博士,分享雲服務領域全維度開發技術。擁有10+年網際網路服務架構、AI產品研發經驗、團隊管理經驗,復旦機器人智慧實驗室成員,國家級大學生賽事評審專家,發表多篇SCI核心期刊學術論文,阿里雲認證的資深架構師,上億營收AI產品研發負責人。
環境搭建
在開始開發之前,我們需要確保本地環境已經安裝了Go語言開發環境。
安裝Go語言
可以從Go語言官網下載適合你作業系統的安裝包,並按照官網的指南進行安裝。
配置開發工具
推薦使用VS Code或GoLand進行Go語言開發。以下是VS Code的配置步驟:
- 安裝VS Code編輯器。
- 安裝Go外掛:開啟VS Code,進入外掛市場,搜尋並安裝
Go
外掛。 - 配置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產品業務負責人。