我是Golang初学者,现在已经学习了几天。我已经了解了很多语法,并开始对此感到满意。今天,我在Go下面的Go中偶然发现了一个片段
log.Fatal(http.ListenAndServe(":3000", handlers.CORS(originsOk, headersOk,
methodsOk)(router)))
ListernAndServe
具有以下签名
func ListenAndServe(addr string, handler Handler) error
现在,令人困惑的部分是上述服务器代码中的Handler
参数。为什么语法如下所示
handlers.CORS(originsOk, headersOk, methodsOk)(router)
参数列表的(router)
部分吗?
有人可以细分此语法以供我理解。
答案 0 :(得分:11)
handlers.CORS
返回一个函数,您正在使用router参数调用该函数。然后,该函数调用返回一个处理程序,然后将该处理程序最终传递给ListenAndServe。
基本上,表达式与此等效:
f := handlers.CORS(originsOk, headersOk, methodsOk)
h := f(router)
log.Fatal(http.ListenAndServe(":3000", h))