为了账号安全,请及时绑定邮箱和手机立即绑定

这是块参数吗?

这是块参数吗?

Go
心有法竹 2021-12-06 19:49:53
我最近开始学习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


查看完整回答
反对 回复 2021-12-06
?
慕少森

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")


查看完整回答
反对 回复 2021-12-06
  • 2 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信