为什么范围内没有帖子? Golang

时间:2014-05-24 12:59:00

标签: go

我想在每个范围循环后增加一个变量。然而,似乎不可能使用标准(for init; condition; post { })语法,因此我想知道为什么。这是我正在尝试做的事情

    for item := range itemsList; page++ {

}

似乎唯一的方法是

        for item := range itemsList{

       page++
    }

看起来不如第一个好。

1 个答案:

答案 0 :(得分:7)

for statement specification确实提到Range Clause独立。

ForStmt = "for" [ Condition | ForClause | RangeClause ] Block .

Post Statement相对,后者属于:

ForClause = [ InitStmt ] ";" [ Condition ] ";" [ PostStmt ] .

这意味着post语句仅在初始化和条件的上下文中有效,以便可能使条件发生变化(因为它在每次执行块后执行,而仅在块是执行)。

在Range子句中没有这样的需求(使条件停止循环),其中循环已经在范围的所有元素(数组,切片,字符串,映射或通道)上完成允许接收操作)足以使循环停止。

在开始循环之前(或至少其长度为),范围表达式被计算一次。每次执行块后都无需更改任何内容。

因此,尝试将post语句添加到范围循环会产生编译错误,如:

expected '{', found ';'