习惯了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)
}
运行效果:
一个是数组,一个是切片。一个被修改了,一个没被修改。一个被复制了所以没变,一个是引用,操作同一个发生改变。