我想以这种方式链接命令:
var cmdGroups = []*commands.CmdGroup {
commands.MakeCmdGroup("foo", cmd1, cmd2, cmd3).AddConstraint(cmd1, cmd2).AddConstraint(cmd2, cmd1, cmd3),
commands.MakeCmdGroup("bar", cmd1, cmd4).AddConstraint(cmd1, cmd4),
}
Run Code Online (Sandbox Code Playgroud)
我想把我的链子分成几行,因为80列长度的原因,但Go不会让我编译这个:
var cmdGroups = []*commands.CmdGroup {
commands.MakeCmdGroup("foo", cmd1, cmd2, cmd3)
.AddConstraint(cmd1, cmd2)
.AddConstraint(cmd2, cmd1, cmd3),
commands.MakeCmdGroup("bar", cmd1, cmd4)
.AddConstraint(cmd1, cmd4),
}
Run Code Online (Sandbox Code Playgroud)
我能做什么 ?
正如FUZxxl所指出的,你的问题是自动插入分号.规范说:
当输入被分解为令牌时,如果该行的最终令牌是,则在非空行的末尾自动将分号插入到令牌流中
- 标识符
- 整数,浮点,虚数,符文或字符串文字
- 其中一个关键字是break,continue,fallthrough或return
- 其中一个运算符和分隔符++, - ,),]或}
你有一个函数调用,它计算)一个分号,在行的末尾添加一个分号.
要绕过自动分号转换,您可以通过以下方式之一编写调用:
使用.而不是分号:
x.
Method(p1,p2,p3)
Run Code Online (Sandbox Code Playgroud)
在参数列表开始之后而不是在函数之前中断:
x.Method(
p1,p2,p3, // , at the end is important to prevent semicolon insertion
)
Run Code Online (Sandbox Code Playgroud)
如果您不喜欢上述方法,您可以(从go1.1开始)将方法视为头等公民,并临时创建可能更短的快捷方式:
f = x.Method
f(p1,p2,p3).f(p3,p4,p5)
Run Code Online (Sandbox Code Playgroud)
我对这个例子的想法不够.f(...).f(...)当然不可能,因为f没有成员的返回值f.人们不得不重新分配f.所以你从中获得了一切.