疑问:http.HandleFunc(
来源:8-3 服务器统一出错处理

慕前端4885459
2019-11-12
errWrapper(filelisting.HandleFileList)
的意思是 传入 errWrapper(filelisting.HandleFileList)
return的处理函数,并且这个处理函数中还包含了一个filelisting.HandleFileList
函数。
这样理解对么? 就一个函数中还包含着另一个函数,如果换成其他语言,比如c++/java这样该如何实现呢?
如果我用下面这样的写法可以吗?
func HandleFileList(writer http.ResponseWriter, request *http.Request) error {
...
}
func errWrapper() func(writer http.ResponseWriter, request *http.Request) {
return func(http.ResponseWriter, *http.Request) {
...
err := HandleFileList(writer, request)
...
}
}
http.HandleFunc("/", errWrapper(filelisting.HandleFileList))
写回答
1回答
-
请参考之前的函数式编程章节,函数是一等公民,可以像整数,字符串那样传参和返回。
这个errWrapper函数的参数是一个HandleFileList函数,它的返回是另一个函数。这个返回的函数里调用了传进来的函数,并且处理了其返回的出错信息。并且这个返回的函数符合http.HandleFunc的参数要求。
c++里面也有类似的函数式编程的做法,同学有兴趣可以查一下functor。Java没有函数式编程,但是有匿名类、lambda表达式,它们和接口结合,也实现了类似的能力。
032019-11-14
相似问题