我最近开始学习Gin,在README文件中包含以下代码:
v1 := router.Group("/v1") { v1.POST("/login", loginEndpoint) v1.POST("/submit", submitEndpoint) v1.POST("/read", readEndpoint) }
我阅读了 Group 方法的源代码,如下所示:
IRouter interface { IRoutes Group(string, ...HandlerFunc) *RouterGroup }
也许我误解了语法或在代码中遗漏了某些东西(在Go语言中我是很新的东西),但看起来它正在将一个块作为第二个参数传递,这在Go语言中可行吗?
您在其中看到的块{ ... }仅仅是一个代码块,而不是任何参数。该Group方法是可变参数的,可以接受任意数量的HandlerFunc参数,但此处未传递任何内容。
{ ... }
Group
HandlerFunc
由于Go是块作用域的,因此您可以使用块来创建有限变量作用域。由于这些块中没有声明,因此我在这里看不到该模式的任何用处,只是HandlerFunc出于样式原因使分配缩进为一组。
显示代码块范围的示例:
http://play.golang.org/p/Kgpw1zCC7X
x := 42 { x := 3 y := 4 fmt.Println("x inside block:", x) // prints 3 } fmt.Println("x outside block:", x) // prints 42 // fmt.Println(y) // undefined: y