猿问

这是块参数吗?

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


心有法竹
浏览 123回答 2
2回答

慕哥6287543

您在其中看到的块{ ... }只是一个代码块,而不是任何参数。该Group方法是可变参数的,可以接受任意数量的HandlerFunc参数,但这里没有传入任何参数。由于 Go 是块作用域,您可以使用块来创建有限的变量作用域。由于块中没有声明,我认为这种模式在这里没有任何用处,除了HandlerFunc由于样式原因导致分配作为一个组缩进。显示代码块范围的示例:http://play.golang.org/p/Kgpw1zCC7Xx := 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

慕少森

IRouter 的 Group 函数是一个可变参数函数。这意味着可以使用任意数量的 HandlerFunc 类型的尾随参数调用它。go 中此类函数的另一个示例是fmt.Println:它的签名是:func Println(a ...interface{}) (n int, err error)所以你可以用可变数量的参数调用它:fmt.Println(1, 2)fmt.Println("a" , "b" , "C")
随时随地看视频慕课网APP

相关分类

Go
我要回答