习惯了java写法,猛地去看go语言,或多或少还是有点别扭的。哈哈,不过没关系,对比着学习还是挺好的。
在java中一提到循环遍历,脑子里立马都是for循环,其实golang中循环也是用for,不过结合了一个关键字一同使用,这个关键字就叫做range。

range可以遍历数组集合:

如下我定义了长度为7的数组,进行遍历。
定义了index和value这两个变量:
index表示索引(相当于java for循环中的i)
value表示遍历出的元素(相当于java中的arr[i])

import "fmt"

func main() {
	a :=[7]int{1,2,3,4,5,6,7}
	for index,value :=range a{
		fmt.Println(index,value)
	   }
	}

运行效果:
在这里插入图片描述
当然你不想要索引,只想要元素时可以使用废弃占位符。

import "fmt"

func main() {
	a :=[7]int{1,2,3,4,5,6,7}
	for _,value :=range a{
		fmt.Println(value)
	}
}

效果如下:
在这里插入图片描述

切片遍历

它和数组的区别就在于中括号中是空的,并且它属于一种引用。

import "fmt"

func main() {
	a :=[]int{1,2,3,4,5,6,7}
	for index,value :=range a{
		fmt.Println(index,value)
	   }
	}

运行效果:
在这里插入图片描述

map遍历:

我们在java中遍历都是根据key获取value,go中map可以这样遍历。
从运行效果中可以看出来,key value都获取到了。

import "fmt"

func main() {
a := map[string]string{"key":"嗨","value":"山石"}
	for t,b := range a{
		fmt.Println(t,b)
	   }
	}

运行效果:
在这里插入图片描述

除此之外还有一个更有趣的东西:

运行如下代码作比较:

import "fmt"

func main() {
  a :=[7]int{1,2,3,4,5,6,7}
   for  b,c :=range a{
   	if b==0 {
   		a[1],a[2]=22,33
   	}
   	a[b]=c+10
   }
   fmt.Println(a)
}

运行效果:
在这里插入图片描述

 import "fmt"

func main() {
  a :=[]int{1,2,3,4,5,6,7}
   for  b,c :=range a{
   	if b==0 {
   		a[1],a[2]=22,33
   	}
   	a[b]=c+10
   }
   fmt.Println(a)
}

运行效果:
在这里插入图片描述
一个是数组,一个是切片。一个被修改了,一个没被修改。一个被复制了所以没变,一个是引用,操作同一个发生改变。