go 使用Mux 创建 RESTful API

在 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)
    }
}

猜你喜欢

转载自blog.csdn.net/jhgj56/article/details/143109770
今日推荐