Golang的循环可以是类似C语言for的,也可以是类似Python的range。
1.
for 循环的
range
格式可以对 slice 或者 map 进行迭代循环,很类似其它脚本语言里面的foreach。range返回两个值:索引、值。
先看个slice的例子:
package main
import "fmt"
func main() {
var list1 = []int{1,3,5,7}
for i, v := range list1 {
fmt.Println(i, v)
}
}
# 输出:
0 1
1 3
2 5
3 7
再来看个map的例子,比slice的好理解些。
package main
import "fmt"
func main() {
var map1 = map[string]int{
"first":1,
"second":2,
"third":3,
}
fmt.Println(map1)
for k, v := range map1 {
fmt.Println(k, v)
}
}
#输出
map[first:1 second:2 third:3]
first 1
second 2
third 3
实际情况是map输出值很可能不是存储顺序的。大体上,各种语言在处理哈希表时候都是乱序存储的。
2. 如果只想接受某一个值,Golang可以用自己特有的方法(一个下划线"_")过滤掉没用的那个值,
还是刚才slice的例子,稍微改动一下:
package main
import "fmt"
func main() {
var list1 = []int{1,3,5,7}
for _, v := range list1 {
fmt.Println(v)
}
}
#输出
1
3
5
7
对于多个返回值的函数,我们都可以用一个或多个下划线"_"来忽略掉某个或某几个我们不想要的值。但是不能全是下划线,必须接受一个。
3. range实际上把所有的迭代都当做哈希来处理的。数组其实也是一种特殊的哈希,对吗?