Go中标识符和表达式的区别

时间:2013-11-07 22:39:20

标签: go

http://golang.org/ref/spec#RangeClause

RangeClause = ( ExpressionList "=" | IdentifierList ":=" ) "range" Expression .

尝试理解范围子句,特别是identifierexpression

之间的区别

感谢。

1 个答案:

答案 0 :(得分:5)

使用range关键字,您可以迭代许多内容并在执行此操作时分配结果。 您可以分配两件事:

  • 标识符(通过IdentifierList
  • 表达式(通过ExpressionList

标识符

这些是在内循环中使用的新变量。他们必须遵守标识符规则(unicode名称,没有空格等)。如果您使用这些,则必须在列表与:=关键字之间使用range运算符。

示例:

for i := range []int{1,2,3} {
    fmt.Println(i)
}

表达式

您不一定需要声明新变量,您可以使用现有变量甚至 具有返回存储位置的表达式。几个例子:

指定指针(Play):

var i = 0

func main() {
    p := &i

    for *p = range []int{1,2,3} {
        fmt.Println(i)
    }
}

返回指针并指定它(Play):

var i = 0

func foo() *int {
    return &i
}

func main() {
    for *foo() = range []int{1,2,3} {
        fmt.Println(i)
    }
}