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?
}
答案 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来调用你的处理程序。