路由器模式 (Router Pattern)

未匹配的标注

在 Go 语言中,路由器模式(Router Pattern)指的是一种将 URL 路径与相应的处理函数进行映射的设计模式。通过路由器模式,我们可以实现基于 URL 路径的请求分发,将不同的请求路由到不同的处理函数中进行处理。

下面是一个简单的使用路由器模式的示例:

package main

import (
    "fmt"
    "net/http"
)

// Router 定义一个路由器结构体
type Router struct {
    handlers map[string]http.HandlerFunc
}

// NewRouter 创建一个新的路由器实例
func NewRouter() *Router {
    return &Router{
        handlers: make(map[string]http.HandlerFunc),
    }
}

// HandleFunc 向路由器中添加新的处理函数
func (r *Router) HandleFunc(path string, handler http.HandlerFunc) {
    r.handlers[path] = handler
}

// 实现 http.Handler 接口,用于处理请求
func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) {
    // 从 handlers 字段中查找当前请求路径对应的处理函数
    handler, ok := r.handlers[req.URL.Path]
    if !ok {
        // 如果找不到,则返回 404 错误
        http.NotFound(w, req)
        return
    }

    // 否则,直接调用相应的处理函数来处理当前请求
    handler(w, req)
}

// 处理 "/" 路径的请求
func homeHandler(w http.ResponseWriter, r *http.Request) {
    if _, err := fmt.Fprint(w, "Welcome to the home page!"); err != nil {
        return
    }
}

// 处理 "/about" 路径的请求
func aboutHandler(w http.ResponseWriter, r *http.Request) {
    if _, err := fmt.Fprint(w, "Learn more about us!"); err != nil {
        return
    }
}

// 处理 "/contact" 路径的请求
func contactHandler(w http.ResponseWriter, r *http.Request) {
    if _, err := fmt.Fprint(w, "Get in touch with us!"); err != nil {
        return
    }
}

func main() {
    // 创建一个新的路由器实例
    router := NewRouter()

    // 将不同的 URL 路径与相应的处理函数进行映射
    router.HandleFunc("/", homeHandler)
    router.HandleFunc("/about", aboutHandler)
    router.HandleFunc("/contact", contactHandler)

    // 启动服务器,并将路由器实例作为参数传入
    err := http.ListenAndServe(":8080", router)
    if err != nil {
        fmt.Println("Failed to start server:", err)
    }
}

在上面的示例中,我们定义了一个 Router 结构体,其中包含一个 handlers 字段。它是一个 map 类型,用于存储 URL 路径与处理函数之间的映射关系。我们可以通过调用 NewRouter 函数创建一个新的路由器实例。使用 HandleFunc 方法可以向路由器添加新的处理函数。

main 函数中,我们创建了一个新的路由器实例,然后使用 HandleFunc 方法将不同的 URL 路径与相应的处理函数进行映射。最后,我们通过调用 http.ListenAndServe 函数来启动服务器,并将路由器实例作为参数传入。在 ServeHTTP 方法中,我们首先从 handlers 字段中查找当前请求路径对应的处理函数。如果找不到,则返回 404 错误。否则,我们就直接调用相应的处理函数来处理当前请求。

上面的示例只是一个非常简单的使用路由器模式的示例。在实际应用中,我们可能需要实现更复杂的路由匹配规则,支持参数化路径、中间件等功能。但是,了解基本的路由器模式原理之后,我们就可以很方便地实现自己的路由器,从而实现基于 URL 路径的请求分发。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~