首页 > 文章列表 > 老师 http.Handle 和 http.HandleFunc 有什么区别?

老师 http.Handle 和 http.HandleFunc 有什么区别?

golang
222 2023-06-02

问题内容

http.Handlehttp.HandleFunc 的区别?

正确答案

http.Handle

函数签名:func Handle(pattern string, handler http.Handler) 使用一个实现了http.Handler接口的处理器处理请求。 处理器类型必须实现ServeHTTP方法,即具有方法签名ServeHTTP(http.ResponseWriter, *http.Request)。 pattern是用于匹配URL路径的模式。

示例代码:

type MyHandler struct{}

func (h MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    // 处理HTTP请求的逻辑
    fmt.Fprint(w, "Hello, World!")
}

func main() {
    myHandler := MyHandler{}
    http.Handle("/", myHandler)
    http.ListenAndServe(":8080", nil)
}

在上面的示例中,我们定义了一个自定义的处理器类型MyHandler,它实现了ServeHTTP方法来处理HTTP请求。然后,我们使用http.Handle函数将处理器和URL路径模式"/"进行绑定。

http.HandleFunc

函数签名:func HandleFunc(pattern string, handler func(http.ResponseWriter, *http.Request)) 使用一个函数来处理请求,该函数接受http.ResponseWriter和*http.Request作为参数。 pattern是用于匹配URL路径的模式。

示例代码:

func helloHandler(w http.ResponseWriter, r *http.Request) {
    // 处理HTTP请求的逻辑
    fmt.Fprint(w, "Hello, World!")
}

func main() {
    http.HandleFunc("/", helloHandler)
    http.ListenAndServe(":8080", nil)
}

在上面的示例中,我们定义了一个名为helloHandler的函数来处理HTTP请求。然后,我们使用http.HandleFunc函数将该函数和URL路径模式"/"进行绑定。