在 Go 语言的 Web 开发中,路由是一个重要的组成部分。net/http
包提供了基本的路由功能,但对于更复杂的应用程序,我们通常需要更强大的路由工具。Gorilla Mux 是一个流行的第三方路由库,提供了灵活的路由选项、变量路由、正则表达式匹配等功能。在本篇博客中,我们将学习如何使用 Gorilla Mux 创建一个简单的 RESTful API。
安装 Gorilla Mux
go get -u github.com/gorilla/mux
package main
import (
"encoding/json"
"fmt"
"net/http"
"github.com/gorilla/mux"
)
// 定义一个结构体表示用户
type User struct {
ID string `json:"id"`
Name string `json:"name"`
}
// 模拟数据存储
var users []User
// 处理获取所有用户的请求
func getUsers(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(users)
}
// 处理创建新用户的请求
func createUser(w http.ResponseWriter, r *http.Request) {
var newUser User
if err := json.NewDecoder(r.Body).Decode(&newUser); err != nil {
http.Error(w, "无法解析请求体", http.StatusBadRequest)
return
}
users = append(users, newUser)
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(newUser)
}
// 处理获取单个用户的请求
func getUser(w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
for _, user := range users {
if user.ID == params["id"] {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(user)
return
}
}
http.Error(w, "用户未找到", http.StatusNotFound)
}
func main() {
// 初始化路由
router := mux.NewRouter()
// 设置路由
router.HandleFunc("/users", getUsers).Methods("GET")
router.HandleFunc("/users", createUser).Methods("POST")
router.HandleFunc("/users/{id}", getUser).Methods("GET")
// 启动 HTTP 服务器
fmt.Println("服务器正在运行,监听端口 8080...")
if err := http.ListenAndServe(":8080", router); err != nil {
fmt.Println("服务器启动失败:", err)
}
}