我想这样链接命令:
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), }
由于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), }
我能做什么 ?
正如FUZxxl指出的那样,您的问题是分号的自动插入。规格说明:
当输入被分解为令牌时,如果该行的最终令牌为,则将分号自动插入到非空白行的末尾的令牌流中。 标识符 整数,浮点数,虚数,符文或字符串文字 关键字之一break,continue,fallthrough或return 运算符和定界符++,-,),]或}之一
当输入被分解为令牌时,如果该行的最终令牌为,则将分号自动插入到非空白行的末尾的令牌流中。
您有一个函数调用,该函数的计数很重要,)因此在行的末尾添加了分号。
)
要避免自动分号转换,您可以通过以下方式之一来编写呼叫:
使用.代替分号:
.
x. Method(p1,p2,p3)
在参数列表的开头而不是函数之前中断:
x.Method( p1,p2,p3, // , at the end is important to prevent semicolon insertion )
如果您不喜欢上述方法,则可以(从go1.1开始)将这些方法视为一等公民,并临时创建可能更短的快捷方式:
f = x.Method f(p1,p2,p3).f(p3,p4,p5)
对于这个例子,我还没有足够的思考。f(...).f(...)当然不可能,因为f没有成员的返回值f。一个将不得不重新分配f。因此,您从中一无所获。
f(...).f(...)
f