GoLang的流程控制
流程控制
1、三大流程控制
- 顺序控制
- 分支控制
- 循环控制
2、顺序控制
程序从上到下逐行地执行,中间没有任何判断和跳转
3、分支控制
分支控制就是让程序有选择执行。有下面三种形式
- 单分支
- 双分支
- 多分支
3.1、单分支
if 条件表达式 {
//
}
3.2、双分支
if 条件表达式 {
//
} else {
//
}
3.3、多分支
if 条件表达式 {
//
} else if 条件表达式2 {
//
}
...
else {
}
3.4、嵌套分支
if 条件表达式 {
if 条件表达式2 {
//
}
} else {
//
}
4、switch分支
4.1、基本介绍
- switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上到下逐一测试,直到匹配为止。
- 匹配项后面也不需要再加break
4.2、语法
switch 表达式 {
case 表达式1, 表达式2, ...:
语句1
case 表达式3, 表达式4, ...:
语句2
...
default:
语句块
}
- switch的执行的流程是,先执行表达式,得到值,然后和case的表达式进行比较,如果相等,就匹配到,然后执行对应的case的语句块,然后退出switch控制。
- 如果switch的表达式的值没有和任何的case的表达式匹配成功,则执行default的语句块。执行switch的控制。
- golang的case后的表达式可以有多个,使用逗号间隔。
- golang中的case语句块不需要写break,因为默认会有,即在默认情况下,当程序执行完case语句块后,就直接退出该switch控制结构。
4.3、案例 (在switch 中写判断)
func main() {
a := 10
switch true {
case a > 10, a == 10:
fmt.Println("成功了")
default:
fmt.Println("没走到")
}
b := a / 10
switch b {
case 2, 3, 4, 5, 6, 7, 8, 9:
fmt.Println("没走到")
default:
fmt.Println("成功了")
}
}
4.4、注意事项
- case/switch后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)
- case后的各个表达式的值的数据类型,必须和switch的表达式数据类型一致
- case后面可以带多个表达式,使用逗号间隔
- case后面的表达式如果是常量值(字面量),则要求不能重复
- case后面不需要带break,程序匹配到一个case后就会执行对应的代码块,然后退出switch,如果一个都匹配不到,则执行default
- default语句不是必须的
- switch后也可以不带表达式,类似if--else分支来使用
a := 10;
switch {
case a > 10, a == 10:
fmt.Println("成功了")
default:
fmt.Println("没走到")
}
- switch后也可以直接声明/定义一个变量,分号结束,不推荐
// 不推荐写法
switch a := 10; {
case a > 10, a == 10:
fmt.Println("成功了")
default:
fmt.Println("没走到")
}
- switch穿透-fallthrough,如果在case语句块后增加fallthrough,则会继续执行下一个case,也叫switch穿透
a := 10
switch true {
case a > 10, a == 10:
fmt.Println("成功了")
fallthrough
default:
fmt.Println("没走到")
}
5、for循环控制
5.1、语法格式
for 循环变量初始化; 循环条件; 循环变量迭代 {
循环操作(语句)
}
5.2、注意事项
-
循环条件是返回一个布尔值的表达式
-
变体写法
for 循环判断条件 { // } for { //通常配合break 使用 }
-
for-range 方式
str := "abc" for index, val := range str { // }
-
传统的对字符串的遍历是按照字节来遍历,而一个汉字在utf8编码是对应3个字节
var str string = "hello,world 上海"
str2 := []rune(str) // 将str转换为[]rune
for i := 0, i < len(str2); i++ {
//
}
// for-range 是按照字符方式遍历的,但是下标是字节数
var str string = "hello,world 上海"
for index, val := range str {
fmt.Printf("index=%d, val=%c \n“, index, val)
}
5.3、break
5.4、continue
5.4、goto,return