我想在每个范围循环后增加一个变量。然而,似乎不可能使用标准(for init; condition; post { }
)语法,因此我想知道为什么。这是我正在尝试做的事情
for item := range itemsList; page++ {
}
似乎唯一的方法是
for item := range itemsList{
page++
}
看起来不如第一个好。
答案 0 :(得分:7)
for
statement specification确实提到Range Clause独立。
ForStmt = "for" [ Condition | ForClause | RangeClause ] Block .
与Post Statement相对,后者属于:
ForClause = [ InitStmt ] ";" [ Condition ] ";" [ PostStmt ] .
这意味着post语句仅在初始化和条件的上下文中有效,以便可能使条件发生变化(因为它在每次执行块后执行,而仅在块是执行)。
在Range子句中没有这样的需求(使条件停止循环),其中循环已经在范围的所有元素(数组,切片,字符串,映射或通道)上完成允许接收操作)足以使循环停止。
在开始循环之前(或至少其长度为),范围表达式被计算一次。每次执行块后都无需更改任何内容。
因此,尝试将post语句添加到范围循环会产生编译错误,如:
expected '{', found ';'