使用中间处理程序函数来路由请求

Zac*_*scs 5 go

我正在考虑使用标准库进行路由的方法.有一个处理函数是否有效,它将根据请求类型调用其他处理函数?例如

func main() {
    m := http.NewServeMux()
    m.HandleFunc("/books", books)
    // ...
}

func books(w http.ResponseWriter, r *http.Request) {
    switch r.Method {
        case "GET":
            getBooks(w, r)
        case "POST":
            createBook(w, r)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是好习惯吗?我不想声明自定义处理程序,因为我发现函数更清洁一些.

Mar*_*oij 5

是的,这是完全有效的; 处理程序只是函数,所以没有理由不应该这样.实际上,这就是中间件通常的实现方式.

根本没有关于处理程序函数的"魔力".只要您正在写入正确的文件描述符(w http.ResponseWriter),任何事情都会发生.

这并不意味着使用这种模式对于所有应用程序来说都是一个好主意 - 路由库存在是有原因的 - 但对于较小的程序,它可以正常工作.