for 循环
循环的结构体:
for init; condition; post {
}
init:一般为赋值表达式,给控制变量一个初始值
condition: 关系表达式或逻辑表达式,循环控制条件(最大的循环次数啊之类的)
post :一般为赋值表达式,给控制变量增量或减量
例 1 + 2 + 3 + 4 +.....+100
sum :=0
for i :=0; i <=100; i++ {
sum +=i
}
第二种for循环
for ; condition; {
}
只要符合控制条件condition,就会一直执行
sum :=0
for ; sum <10; {
sum++
fmt.Println(sum)
}
第三种for循环
这种更加简洁了,如下:
for sum <=20 {
sum++
fmt.Println(sum)
}
/** 只要满足 sum小于20 sum就会一直自加 */
For-each range 循环
这种循环是用来对符串、数组、切片等的迭代
例:
var name ="龙猫这部电影真的很好看"
for i,s :=range name{
fmt.Println(i,string(s))
}
/** i对应下标 ,s迭代的值 */
嵌套循环
在 for 循环中嵌套一个或多个 for 循环
例 打印一个简易的九九乘法表:
for i :=1; i <=9; i++ {
for j :=1; j <= i; j++ {
fmt.Println(j, "*", i, "=", j*i)
}
}
循环控制语句
循环控制语句的作用是在循环体内 控制循环执行过程(跳出循环啊 之类的)
go 语言支持的循环控制语句有:
break语句:经常用于中断当前 for 循环或跳出 switch 语句
在for循环中:
a :=2
for a <20 {
a++
if a >12 {
break
}
fmt.Println(a)
}
//在上面代码中a一直自加 当a自加到大于12的时候 就直接跳出整个循环 所以只会打印3到12的值
在switch语句中
a :=5
switch {
case a <10:
fmt.Println("a小于10")
fallthrough
case a >3:
fmt.Printf("a大于3")
default:
fmt.Printf("default")
}
上面代码 我们加了fallthrough 所以执行完 a <10里面的内容后 不管下面条件是否成立 还会继续执行下面一行代码,所以最后打印的是:a小于10,a大于3
当我们加上break时候:
a :=5
switch {
case a <10:
fmt.Println("a小于10")
if a <6 {
break
}
fallthrough
case a >3:
fmt.Printf("a大于3")
default:
fmt.Printf("default")
}
//直接跳出了循环 不会再继续执行,最后输出的是:a小于10
continue 语句:跳过当前循环的剩余语句,然后继续进行下一轮循环(不是中断执行哟)
for循环:
for i :=1; i <5; i++ {
if i ==3 {
continue
}
fmt.Println(i)
}
//上面代码 当执行到i为3的时候,直接就会跳出此次循环进行一次循环,所以最终的打印的值是 1,2,4
goto语句:将控制转移到被标记的语句
for循环:
for i :=1; i <5; i++ {
if i ==3 {
goto KEDAYA
}
fmt.Println(i)
}
KEDAYA:
fmt.Println("到3执行了goto跳转")
//当执行到i为3的时候,执行了goto转移,转移到label为KEDAYA的地方,最后输出结果为:1, 2, 到3执行了goto跳转
如果不清楚goto 跳转label可以看这儿go基础(5.1)go label 的用法 - 简书
同样的continue (其实执行结果和直接使用continue 一样的,所有感觉continue后面接label优点多余)
KEDAYA:
for i :=1; i <5; i++ {
if i ==3 {
continue KEDAYA
}
fmt.Println(i)
}
//输出结果为1,2,4
break后面接label:
KEDAYA:
for i :=1; i <5; i++ {
if i ==3 {
break KEDAYA
}
fmt.Println(i)
}
//最后输出的结果为1,2
无限循环
如果循环中条件语句永远不为 false 则会进行无限循环(其实就是死循环),我们可以通过 for 循环语句中只设置一个条件表达式来执行无限循环:
for true {
fmt.Println("这个会循环到宇宙重启")
}