猿问

令人困惑的函数调用语法

我是一名 Golang 初学者,我已经学习了几天了。我已经学习了大量它的语法并开始适应它。今天我偶然发现了下面 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)参数列表的一部分吗?

有人可以分解这个语法让我理解吗?


倚天杖
浏览 123回答 1
1回答

撒科打诨

handlers.CORS返回一个函数,您正在使用路由器参数调用该函数。然后该函数调用返回一个处理程序,然后该处理程序最终传递给 ListenAndServe。基本上表达式等同于:f := handlers.CORS(originsOk, headersOk, methodsOk) h := f(router) log.Fatal(http.ListenAndServe(":3000", h))
随时随地看视频慕课网APP

相关分类

Go
我要回答