传递给http.HandleFunc的函数如何访问http.ResponseWriter和http.Request?

时间:2016-06-25 06:20:02

标签: http go

func main() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r http.Request) {
    // I never declared, initialized or passed w and r. How does this function get access to them?
}

2 个答案:

答案 0 :(得分:2)

http.HandleFunc知道它给定的输入参数,第二个parm将有自己的输入参数(w http.ResponseWriter,r http.Request)...所以w和r是由http.HandleFunc设置的,它在注册func之后处理程序作为回调它然后调用w和r中的传递...所以责任调用不在回调定义本身内部的上下文

编写自己的这样一对函数是值得的,其中一个是传递给其他函数并由其他函数调用的回调...这个模式与golang正交并且是跨语言的普遍工具

答案 1 :(得分:0)

这是golang和http包的神奇之处。不只是kiding。

实际上http.HandleFunc会为你做这件事,所以当一个请求通过匹配的url到达你的webservice时,golang http包会用w和r来调用你的处理程序。