2 回答
TA贡献1864条经验 获得超6个赞
(_, _ <-chan interface{})
相当于(<-chan interface{}, <-chan interface{})
. 除了源代码长度和可读性之外,没有区别。
(<-chan interface{}, <-chan interface{})
我们从返回值类型开始。由于返回值可以有名称,因此可以写入
(ch1 <-chan interface{}, ch2 <-chan interface{})
返回相同的 2 个通道。具有相同类型的参数序列(或返回值)可以省略除最后一个变量之外的所有变量的类型。因此我们的返回类型变成:
(ch1, ch2 <-chan interface{})
因为我们真的不需要返回值的名称,我们可以用下划线替换名称,再次使它们匿名:
(_, _ <-chan interface{})
瞧!同一类型的可读通道对。
TA贡献1817条经验 获得超6个赞
这是func声明
FunctionType = "func" Signature .
Signature = Parameters [ Result ] .
Result = Parameters | Type .
Parameters = "(" [ ParameterList [ "," ] ] ")" .
ParameterList = ParameterDecl { "," ParameterDecl } .
ParameterDecl = [ IdentifierList ] [ "..." ] Type .
如您所见, theResult就像方法的参数 a Parameters,后者又归结为IdentifierList. 出现了空白标识符_,可以替换IdentifierList.
原作者将此与“声明为同一类型的多个标识符”语法一起使用,以产生 - 正如已经提到的 - 一种奇怪的阅读声明,其中包含两个相同类型的返回值。
请参阅https://golang.org/ref/spec#Function_declarations
您还可以通过使用空白标识符来实现“删除”参数的功能。当您不需要您实现的接口的参数时,可能会派上用场。
func foo(a string, _ int, b string) { ... }
第二个参数不可用。
- 2 回答
- 0 关注
- 93 浏览
添加回答
举报