这是一个块参数吗?

时间:2016-01-08 19:05:21

标签: go

我最近开始学习Gin并在README文件中提供以下代码:

v1 := router.Group("/v1")
{
    v1.POST("/login", loginEndpoint)
    v1.POST("/submit", submitEndpoint)
    v1.POST("/read", readEndpoint)
}

我为方法群组引用了source code,就像这样:

IRouter interface {
    IRoutes
    Group(string, ...HandlerFunc) *RouterGroup
}

也许我误解了语法或者在代码中遗漏了一些东西(我在Go中很新),但看起来它传递了一个块作为第二个参数,这在Go中是否可能?

2 个答案:

答案 0 :(得分:4)

您在getExtensions<T>()中看到的块就是一个代码块,而不是任何参数。 Group方法是可变参数,可以接受任意数量的$(document).ready(function(){ $('p a').embedly({ key: 'nonyodamnbusiness' }); }); 个参数,但这里没有传递任何内容。

由于Go是块作用域,因此您可以使用块来创建有限的变量作用域。由于块中没有声明,因此我认为此模式没有用,除了导致{ ... }赋值由于样式原因而缩进为一组。

显示代码块范围的示例:

http://play.golang.org/p/Kgpw1zCC7X

HandlerFunc

答案 1 :(得分:0)

IRouter的Group函数是variadic function。这意味着可以使用HandlerFunc类型的任意数量的尾随参数调用它。

这种类型的函数的另一个例子是fmt.Println

它的签名是:

func Println(a ...interface{}) (n int, err error)

所以你可以使用可变数量的参数调用它:

fmt.Println(1, 2) fmt.Println("a" , "b" , "C")