福州做网站建设,长沙做搜索引擎的公司,常州设计公司,网站空间买什么的好目录
目录
一#xff1a;介绍
1: for流程控制
2#xff1a;for-range流程控制
二#xff1a;实例展示
1#xff1a;//按照一定次数循环 2#xff1a;//无限循环
3: //循环遍历整数、各种容器和通道
4#xff1a;遍历通道
5#xff1a;//指针数组循环
6…目录
目录
一介绍
1: for流程控制
2for-range流程控制
二实例展示
1//按照一定次数循环 2//无限循环
3: //循环遍历整数、各种容器和通道
4遍历通道
5//指针数组循环
6使用continue
7 协成处理
8: 循环字典按照顺序 一介绍
go中的循环有for和for range两种循环结构for循环结构
1: for流程控制
for InitSimpleStatement; Condition; PostSimpleStatement { // do something }
在一个for循环代码块中 InitSimpleStatement初始化语句和PostSimpleStatement步尾语句两个部分必须均为简单语句并且PostSimpleStatement不能为一个变量短声明语句。 Condition必须为一个结果为布尔值的表达式它被称为条件表达式。 所有这三个刚提到的部分都是可选的。和很多其它流行语言不同在Go中上述三部分不能用小括号括在一起。
2for-range流程控制
for-range流程控制代码块可以用来遍历整数、各种容器和通道等。
注意使用for-range流程控制代码块来遍历整数是从Go 1.22才开始支持的。
二实例展示
1//按照一定次数循环 for i : 1; i5; i {fmt.Println(i)} 2//无限循环 var j intfor {j 1fmt.Println(1)if j 10 {break;}}
3: //循环遍历整数、各种容器和通道 arr : [2]string{苹果,香蕉}for index, value : range arr {fmt.Println(index)fmt.Println(value)} 4遍历通道
c : make(chan int)go func() {for i:0; i 10; i {c - i}close(c)}()for i : range c {fmt.Println(i)}fmt.Println(done)
5//指针数组循环 type Goods struct {name stringprice float64}allGoods : []*Goods{Goods{name:香蕉,price:3.2},Goods{name:苹果,price:2.2}}
定义一个结构体是Goods的指针数组保存每一个实例化结构体的地址循环读取地址打印地址的内容 for _, item : range allGoods {fmt.Println(*item)} 这里有个问题如果我们在循环中保存结构体的地址到数组指针就会出现问题看下面的程序
allGoods : []Goods{Goods{name:香蕉,price:3.2},Goods{name:苹果,price:2.2}}
我们定义一个结构体数组循环这个数组获取每个结构体的地址保存到一个指针数组中
var saleGoods []*Goodsfor _, item : range allGoods {saleGoods append(saleGoods,item)}fmt.Println(saleGoods)
正常我们打印出来是一个保存地址的数组但是发现这个数组只保存最后一个数据的地址数组的地址是重复的。
解决方法是循环中item的值每次重新赋值
item itemsaleGoods append(saleGoods,item)
默认go在循环中不是变量的迭代而是循环本身这个问题在Go 1.22之后得到改善。
6使用continue for i : 0; i 10; i {if i % 2 0 {continue}fmt.Print(i)
7 协成处理
var m []int{1, 2, 3}
for _,i : range m {go func(i int) {fmt.Print(i)}(i)
}time.Sleep(time.Millisecond)
但是这样循环是没有顺序的如果需要按照一定的顺序该怎么处理呢 8: 循环字典按照顺序 m : map[string]int32{roy: 18,kitty: 16,hugo: 21,tina: 35,jason: 23,}lst : []string{}for k, _ : range m {lst append(lst, k)}sort.Strings(lst) //排序字符串for _,i : range lst {fmt.Println(m[i])}