疑问: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回答

ccmouse

2019-11-13

请参考之前的函数式编程章节,函数是一等公民,可以像整数,字符串那样传参和返回。

这个errWrapper函数的参数是一个HandleFileList函数,它的返回是另一个函数。这个返回的函数里调用了传进来的函数,并且处理了其返回的出错信息。并且这个返回的函数符合http.HandleFunc的参数要求。

c++里面也有类似的函数式编程的做法,同学有兴趣可以查一下functor。Java没有函数式编程,但是有匿名类、lambda表达式,它们和接口结合,也实现了类似的能力。

0
3
慕前端4885459
非常感谢!
2019-11-14
共3条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程