我想在每个范围循环后增加一个变量.然而,似乎不可能使用标准( for init; condition; post { })语法,因此我想知道为什么.这就是我想要做的
for item := range itemsList; page++ {
}
Run Code Online (Sandbox Code Playgroud)
似乎唯一的办法就是这样做
for item := range itemsList{
page++
}
Run Code Online (Sandbox Code Playgroud)
这看起来不像第一个那么好.
ForStmt = "for" [ Condition | ForClause | RangeClause ] Block .
Run Code Online (Sandbox Code Playgroud)
与Post Statement相反,后者是:
ForClause = [ InitStmt ] ";" [ Condition ] ";" [ PostStmt ] .
Run Code Online (Sandbox Code Playgroud)
这意味着post语句仅在初始化和条件的上下文中有效,以便可能使条件发生更改(因为它在每次执行块后执行,并且仅在块执行时执行).
在Range子句中没有这样的需要(使条件停止循环),其中循环已经在范围的所有元素(数组,切片,字符串,映射或通道允许接收操作)上完成)足以让循环停止.
范围表达式在开始循环之前被评估一次(或者至少它的长度是).每次执行块后都无需更改任何内容.
因此,尝试将post语句添加到范围循环会生成编译错误,如:
expected '{', found ';'
Run Code Online (Sandbox Code Playgroud)