Range(范围)
range
关键字的存在为迭代提供了很大的便利,可以通过for-range
循环来迭代array
、slice
、map
、string
、struct
等集合类型的数据类型。
基本使用原理
切片迭代
nums := []int{1,2,3}
for k, v := range nums {
fmt.Println(k, v)
}
//其中k为切片索引,v为对应的切片元素值
我们也可以省略遍历value,通过num[key]
通过数组下标随机搜索到该元素。
for k, _ := range nums{}
map
迭代
kvs := map[string]string{
"a":"a",
"b":"b",
}
for k, v := range kvs {
fmt.Println(k, v)
}
需要注意的是:从Go1
开始,遍历的起始节点是随机的了
字符串迭代
for k, v := range "hello"{
//这里的单个字符是对应的ASCII码值
fmt.Printf("%d,%c",k, v)
}
结构体迭代
ex := []struct{
int
string
}{
{1,"a"},
{2,"b"},
}
for k, v := range ex {
fmt.Println(k, v)
}
需要注意的是:由于在循环开始前的时候循环次数已经确定,迭代过程中添加新的元素无法迭代到
总结&&Tips
range
可以用于for
循环遍历array
、slice
、map
、string
、struct
所有涉及的元素。- 通过
range
遍历到的index
和value
是对应值的拷贝,改变value
的值是无法对目标元素的值进行修改的。