令人困惑的函数调用语法

时间:2019-03-07 09:04:37

标签: go

我是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)部分吗?

有人可以细分此语法以供我理解。

1 个答案:

答案 0 :(得分:11)

handlers.CORS返回一个函数,您正在使用router参数调用该函数。然后,该函数调用返回一个处理程序,然后将该处理程序最终传递给ListenAndServe。

基本上,表达式与此等效:

f := handlers.CORS(originsOk, headersOk, methodsOk)
h := f(router)
log.Fatal(http.ListenAndServe(":3000", h))