http://golang.org/ref/spec#RangeClause
RangeClause = ( ExpressionList "=" | IdentifierList ":=" ) "range" Expression .
尝试理解范围子句,特别是identifier和expression
之间的区别感谢。
答案 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)
}
}