http.HandleFunc("/", errWrapper(filelisting.HandleListFile))函数执行流程

来源:3-4 服务器统一出错处理2

虚三白

2021-07-01 11:19:56

您好,通过debug模式看到执行顺序是errWrapper之后再是HandleFunc,这里有个疑惑,errWrapper不是在HandleFunc中执行,那他怎么获取write和request参数,来处理error

写回答

1回答

ccmouse

2021-07-04

这是函数式编程的应用。说的是这段代码https://git.imooc.com/class-108/learngo/src/master/lang/errhandling/filelistingserver/web.go#L18 

http://img.mukewang.com/climg/60e1137409260c8615620666.jpg

这个errWrapper其实只有一行语句,就是返回了一个函数,返回的函数的类型是func(http.ResponseWriter, *http.Request)。

在运行18行(其实是18行到整个errWrapper的结束,这一个语句),它没有做任何事情,只是生成了func(http.ResponseWriter, *http.Request)这么一个函数,并且返回,我们会拿着它返回的这个函数注册到http handler里面https://git.imooc.com/class-108/learngo/src/master/lang/errhandling/filelistingserver/web.go#L67 

这些是一次性的,在初始化的时候就完成,此时服务器还没有起来。注册完成之后,http服务器通过ListenAndServe启动,并开始接受请求。请求来了http会包装成http.ResponseWriter和*http.Request,调用我们注册的函数。

0

0 学习 · 1399 问题

查看课程