Golang HTTP处理函数

问题描述 投票:1回答:2

我看到一些http处理函数声明是多种多样的。我发现其中两个是标准函数,一个在处理程序中返回匿名函数。例如:

使用标准方式:

func helloworld(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello World")
}

这是为http api声明处理程序的最直接方式。

另一种方法是在处理函数中使用anonym / closure函数:

func helloworld2() http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){
        fmt.Fprintln(w, "Hello World")
    })
}

有什么区别和好处?什么时候使用其中之一?什么是最佳做法?

go httphandler
2个回答
6
投票

图案

func Middleware(next http.Handler) http.Handler{
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    // Do something
    next.ServeHTTP(w, r)
  })
}

经常用来构建中间件链

http.Handle("/", middlewareOne(middlewareTwo(finalHandler)))

5
投票

通过返回闭包,返回匿名函数是处理需要其他参数的处理程序的唯一方法。例:

func fooHandler(db *someDatabase) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // do something with `db` variable
    }
}

否则,这些方法之间通常没有实际差异。人们可以选择普遍使用匿名函数来保持一致性。

© www.soinside.com 2019 - 2024. All rights reserved.