go 语言中range关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。
大多数人都知道在range子句的左边(在上面的例子中的i)你可以使用以下命令分配循环变量:
-- 赋值(=)
-- 短变量声明(:=)
你也可以选择不做任何事情来完全忽略循环变量。
如果使用短变量声明(:=),Go将为循环的每次迭代重用变量(仅在循环的范围内)
range 表达式在range子句的右侧(在下面的示例中array),你可以找到他们称之为range表达式的内容。它可以包含任何计算结果为以下之一的表达式:
-- array
-- pointer to an array
-- slice
-- string
-- map
-- channels that allow receiving, e.g. chan int or chan
实例 1:
<code>
package
mainimport
"fmt"
func
main
()
{ array := [3
]int
{1
,2
,3
} slice := []int
{10
,11
,12
,13
} kvs :=map
[string
]string
{"a"
:"A"
,"b"
:"B"
,"c"
:"C"
}for
i, v :=range
array { fmt.Println(i, v) }for
i, v :=range
slice { fmt.Println(i, v) }for
k, v :=range
kvs { fmt.Println(k, v) } }/<code>输出:
<code>
0
1
1
2
2
3
*****************
0
10
1
11
2
12
3
13
*****************
a
A
b
B
c
C
/<code>如果将for range 数组,切片和集合的v去掉,变成如下代码,range将分别返回对应数组和列表的索引,以及集合的键。
实例2:
<code>
package
mainimport
"fmt"
func
main
()
{ array := [3
]int
{1
,2
,3
} slice := []int
{10
,11
,12
,13
} kvs :=map
[string
]string
{"a"
:"A"
,"b"
:"B"
,"c"
:"C"
}for
i :=range
array { fmt.Println(i) }for
i :=range
slice { fmt.Println(i) }for
k :=range
kvs { fmt.Println(k) } }/<code>输出:
<code>
0
1
2
*****************
0
1
2
3
*****************
a
b
c
/<code>