# 路由分组、请求验证、日志

URL: https://caijiao.org/go/06-web/09-routing-validate-log
Source: docs/go/06-web/09-routing-validate-log.md
Description: 本节介绍 Go HTTP 服务中路由分组、请求验证及日志记录的实用方法，提升项目结构与安全性。

## 1. 路由分组

利用第三方路由框架（如 gorilla/mux）实现路由分组：

```go
r := mux.NewRouter()
api := r.PathPrefix("/api").Subrouter()
api.HandleFunc("/users", usersHandler).Methods("GET")
````

## 2. 请求验证

在处理函数中校验请求参数或身份：

```go
func authMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        token := r.Header.Get("Authorization")
        if token != "valid-token" {
            http.Error(w, "Unauthorized", http.StatusUnauthorized)
            return
        }
        next.ServeHTTP(w, r)
    })
}
```

## 3. 日志记录

实现简单日志中间件：

```go
func loggingMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        log.Printf("%s %s", r.Method, r.RequestURI)
        next.ServeHTTP(w, r)
    })
}
```

## 4. 组合使用

将中间件和路由分组结合，实现安全且可维护的 API。

---

路由分组、验证和日志是大型 Web 服务开发的基础模块。
