1, range用来遍历 array, slice,还有map
在array,slice中返回索引值还有数值
在map中返回键值对
2,
package main
2
3 import (
4 "fmt"
5 "sort"
6 )
7
8 func main(){
9 m := map[int]string{1 : "a", 2 : "b", 3 : "c", 4 : "d", 5 : "e"}
10 s := make([]int, len(m))
11 i := 0
12 for k, _ := range m{
13 s[i] = k
14 fmt.Println(i, k)
15 i++
16 }
17
18 fmt.Println(s)
19 sort.Ints(s) //将下面两行注掉,结果就是从小到大排序
20 fmt.Println(s)
21
22 }
[root@localhost GO]# ./hello
0 3
1 4
2 5
3 1
4 2
[3 4 5 1 2]
[1 2 3 4 5]
[root@localhost GO]# ./hello
0 3 //这个顺序是随机的,每次运行都不一样
1 4
2 5
3 1
4 2
[3 4 5 1 2]
[1 2 3 4 5]
3,range遍历数组是相当于c++中的深拷贝,是复制了一份值,之后的改动和原数组互补干扰
遍历Slice相当于C++中浅拷贝,
package main
2
3 import (
4 "fmt"
5 )
6
7 func main(){
8 s := [3]int{1, 2, 3} //数组, 用range是拷贝了一份值去操作
9
10 for i, v := range s{
11 if i == 0{
12 s[1] = 200
13 s[2] = 300
14 }
15 s[i] = v + 100
16 fmt.Print(s[i], " ") //101 102 103
17 }
18 fmt.Println(s) //[101, 102, 103]
19 }
package main
2
3 import (
4 "fmt"
5 )
6
7 func main(){
8 s := []int{1, 2, 3} 切片是拷贝了指针,还是在操作原数组的值
9
10 for i, v := range s{
11 if i == 0{
12 s[1] = 200
13 s[2] = 300
14 }
15 s[i] = v + 100
16 fmt.Print(s[i], " ") //101 300 400
17 }
18 fmt.Println(s) //[101, 300, 400]
19 }