流程控制
流程控制的作用
流程控制语句是用来在控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
控制语句的分类:
- 顺序结构
- 分支结构
- 循环结构
分支结构
if分支
if单分支
条件表达式左右的()括号可省略:
if 条件表达式{
逻辑代码
}
PS:在Golang里if后面可以并列的加入变量的定义
if count :=20;count < 20{
fmt.Println("aaaaa")
}
if双分支
if 条件表达式{
逻辑代码1
} else {
逻辑代码2
}
if多分支
if 条件表达式{
逻辑代码1
} else if {
逻辑代码2
} else if {
逻辑代码3
} else {
逻辑代码4
}
switch分支
基本语法
switch 表达式{
case 值1,值2,....:
语句块1
case 值3,值4,....:
语句块2
default:
语句块
}
注意事项
- switch后面是一个表达式(即:常量值、变量、一个有返回值的函数)
- case后面的值如果是常量值(字面量)。则要求不能重复
- case后面的各个值的数据类型,必须和switch的表达式数据类型一致。
- case后面带多个值,使用逗号间隔。case 值1,值2,....
- case后面不需要break
- default语句不是必须,位置也是随意的。
- switch后面可以不带表达式,当做if分支来使用
switch{
case a == 1:
fmt.Println("aaa")
case a == 2:
fmt.Println("bbb")
}
- switch后也可以直接声明/定义一个变量,分号结束
- switch穿透,利用
fallthrough关键字,如果在case语句块后增加fallthrough,则会执行下一个case,也叫switch穿透。
循环结构
语法结构
for 初始表达式;布尔表达式;迭代因子 {
循环体;
}
注意事项
- for的初始表达式,不能使用
var a int = 10,可使用:= - 格式灵活
i := 1
for i <= 5 {
fmt.Println("你好,Golang")
i++
}
- 死循环
for{
fmt.Println("你好,Golang")
i++
}
for ;;{
fmt.Println("你好,Golang")
i++
}
for range
- for range结构是Go语言特有的一种迭代结构。在许多情况下都非常有用,for range可以遍历数组、切片、字符串、map及通道,for range 语法上类似于其他语言中的foreach余元。一般形式为:
for key,val := range coll{
...
}
//方式一:普通for循环:按照字节进行遍历输出(暂不用中文)
var str string = "helllo golang"
for i := 0; i < len(str); i++ {
fmt.Printf("%c\n", str[i])
}
//方式二:for range支持中文
for i , value := range str{
fmt.Printf("索引为:%d,具体的值为:%c \n",i,value)
}
//对str进行遍历,遍历的每个结果的索引值被i接收,每个结果的具体数值被value接收
//遍历对字符进行遍历
关键字
关键字 break
- switch分支中,每个case分支后都用break结束当前分支,但是在go语言中
break可省略不写 break可以结束正在执行的循环break的作用是离它最近的循环- 标签的使用效果
label1:
for i:=1;i<=5;i++ {
for j:=2;j<=4;j++ {
fmt.Printf("i: %v,j:%v\n",i, j)
if i==2&& j== 2 {
break label1
}
}
}
注意:如果标签没使用的话则不用定义。
关键字 continue
for i:=1; i<= 100;i++ {
if i % 6 != 0 {
continue //结束本次循环,继续下一个循环
}
fmt.Println(i)
}
- continue的作用就是结束离它进的那个循环,继续离他近的那个循环
- 标签也可以同样在continue中使用
label1:
for i:=1;i<=5;i++ {
for j:=2;j<=4;j++ {
if i==2 && j== 2 {
continue label1
}
fmt.Printf("i: %v,j:%v\n",i, j)
}
}
关键字 goto
- 提供语法,但不建议使用
- 一般都配合条件结构一起使用
fmt.Println("hello golang1")
fmt.Println("hello golang2")
if 1 == 1 {
goto label1
}
fmt.Println("hello golang3")
fmt.Println("hello golang4")
fmt.Println("hello golang5")
fmt.Println("hello golang6")
fmt.Println("hello golang7")
label1:
fmt.Println("hello golang8")
fmt.Println("hello golang9")
关键字 return
- 在方法和函数中使用较多
- 用于结束当前函数
for i := 1; i <= 100 ; i++ {
fmt.Println(i)
if i == 14 {
return // 结束当前的函数,下面的hello golang不执行
}
}
fmt.Printf("hello golang")