一尘不染

这是一个块参数吗?

go

我最近开始学习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语言中可行吗?


阅读 194

收藏
2020-07-02

共1个答案

一尘不染

您在其中看到的块{ ... }仅仅是一个代码块,而不是任何参数。该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
2020-07-02