我最近开始学习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 中可能吗?
2 回答
慕哥6287543
TA贡献1831条经验 获得超10个赞
您在其中看到的块{ ... }只是一个代码块,而不是任何参数。该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
慕少森
TA贡献2019条经验 获得超9个赞
IRouter 的 Group 函数是一个可变参数函数。这意味着可以使用任意数量的 HandlerFunc 类型的尾随参数调用它。
go 中此类函数的另一个示例是fmt.Println:
它的签名是:
func Println(a ...interface{}) (n int, err error)
所以你可以用可变数量的参数调用它:
fmt.Println(1, 2)
fmt.Println("a" , "b" , "C")
- 2 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消