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?
}
http.HandleFunc知道它给定的输入参数,第二个参数将有自己的输入参数(w http.ResponseWriter,r http.Request) ...因此w和r由http.HandleFunc设置,在它注册func处理程序作为回调后调用并传递w和r ...因此责任被赋予调用上下文而不是回调定义本身
编写自己的这样一对函数是值得的,其中一个是回调函数,通过其他函数传递和调用...这种模式与golang正交,并且是跨语言的普遍工具
这是golang和http包的魔力。不,只是开玩笑。
事实上,http.HandleFunc会为您完成此操作,因此当请求到达您的Web服务并具有匹配的URL时,golang http包将使用准备好的w和r调用您的处理程序。