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

3
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个回答

2

http.HandleFunc知道它给定的输入参数,第二个参数将有自己的输入参数(w http.ResponseWriter,r http.Request) ...因此w和r由http.HandleFunc设置,在它注册func处理程序作为回调后调用并传递w和r ...因此责任被赋予调用上下文而不是回调定义本身

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


1

这是golang和http包的魔力。不,只是开玩笑。

事实上,http.HandleFunc会为您完成此操作,因此当请求到达您的Web服务并具有匹配的URL时,golang http包将使用准备好的w和r调用您的处理程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接