gpt4 book ai didi

仅包含标准库的 Golang 中间件

转载 作者:IT王子 更新时间:2023-10-29 00:44:52 24 4
gpt4 key购买 nike

我的第一个 stackoverflow 问题,所以请原谅我对 stackoverflow 的天真和提出的问题,golang 初学者。

想知道这两个调用的区别,也想简单了解一下Handle, Handler, HandleFunc, HandlerFunc.

http.Handle("/profile", Logger(profilefunc))
http.HandleFunc("/", HomeFunc)

func main() {            
fmt.Println("Starting the server.")

profilefunc := http.HandlerFunc(ProfileFunc)

http.Handle("/profile", Logger(profilefunc))
http.HandleFunc("/", HomeFunc)

http.ListenAndServe("0.0.0.0:8081", nil)
}

func Logger(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){
log.Println("Before serving request")
h.ServeHTTP(w, r)
log.Println("After serving request")
})
}

func ProfileFunc(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "You are on the profile page.")
}

func HomeFunc(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello Imran Pochi")
}

最佳答案

I would like ... simple understanding of the Handle, Handler, HandleFunc, HandlerFunc.

  • Handler 是一个可以响应 HTTP 请求的接口(interface),它有一个 ServeHTTP(ResponseWriter, *Request) 方法。
  • http.Handle 注册一个 Handler 来处理匹配给定 pattern 的 HTTP 请求。
  • http.HandleFunc 注册一个处理程序函数来处理匹配给定 pattern 的 HTTP 请求。处理程序函数的格式应为 func(ResponseWriter, *Request)
  • HandlerFuncfunc(ResponseWriter, *Request) 形式的显式函数类型。 HandlerFunc 有一个调用自身的方法 ServeHTTP 。这允许您将函数转换为 HandlerFunc 并将其用作 Handler

I would to know the difference between the two calls

http.Handle("/profile", Logger(profilefunc))
http.HandleFunc("/", HomeFunc)

Loggermiddleware 的一个例子,这是一个接受 http.Handler 并返回另一个包装原始处理程序的 http.Handler 的函数。当被调用时,此处理程序可能(或可能不会)在执行某些操作之前和/或之后调用嵌套的 http.Handler。所以第一行是说用模式“/profile”注册包裹在Logger中间件中的profileFuncHandler。第二行是说用“/”模式注册 HomeFunc 函数。

关于仅包含标准库的 Golang 中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44110834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com