程序控制流程:顺序控制,分支控制,循环控制
顺序控制
程序从上到下逐行执行,中间没有任何判断和跳转
if条件判断
单分支、双分支、多分支
// 单分支基本语法:当条件表达式为真,就会执行代码块1
if 条件表达式{
执行代码块1
}
// 双分支基本语法:当条件表达式为真,就会执行代码块1,否则执行代码块2
if 条件表达式{
执行代码块1
}else{
执行代码块2
}
// 多分支基本语法:当条件表达式1为真,就会执行代码块1,否则判断表达式2,依次循环
if 条件表达式1{
执行代码块1
}else if 条件表达式2{
执行代码块2
}
...
else {
执行代码块n
}
嵌套if条件判断
一个分支结构中又嵌套了另一个分支结构
//基本语法
if 条件表达式1 {
if 条件表达式2 {
执行代码1}else{
执行代码2}
}
}
switch分支结构
// 基本语法
switch 表达式{
case 表达式1:执行程序1
case 表达式2:执行程序2
...
default:执行程序
}
//例子
var key byte
fmt.Println("请输入一个字符")
fmt.Scanf("%c",&key)
switch key{
case ‘a’:
fmt.Println("周一")
case 'b':
fmt.Println("周二")
case 'c':
fmt.Println("周三")
case 'd':
fmt.Println("周四")
case 'e':
fmt.Println("周五")
case 'f':
fmt.Println("周六")
default:
fmt.Println("周日")
}
for循环控制
/* 基本语法
for 循环变量初始化;循环条件;循环变量迭代{
循环操作(语句)
}
*/
// for循环的第一种写法
for i := 0; i < 10 ; i++{
fmt.Println("你好",i) // 循环输出10次“你好”
}
// for循环的第二种写法
i := 0
for i<10 {
fmt.Println("你好",i) // 循环输出10次“你好”
i++
}
// for循环的第三种写法
i := 0
for ;; {
if i <10 {
fmt.Println("你好",i)
}else{
break // break作用跳出循环
}
}
for-range循环遍历
// for-range使用例子,可以循环字符串、数组、结构体
str := "hello"
for index,value := range str{
fmt.Println("index=%v , value=%v",index,value) //每个字母单行输出
}
//for-range对字符串按字节遍历,而一个汉字对应3个字节,如果字符串含中文,使用上述方式会出现乱码
//解决方案,需要将str转成切片
var str2 string = "你好"
str2 := []rune(str) // 把str转成[]rune
for i := 0;i<len(str2);i++{
fmt.Println("%c ,",str2[i]) //使用到下标
}
跳转语句:break、continue、goto、return
break语法:break语句用于终止程序的执行,用于中断当前for循环或跳出switch语句
continue语法:continue用于结束本次循环,继续执行下一次循环
goto语句:可以无条件的转移到程序中指定的行(不推荐使用,容易程序混乱)
return语句:return使用在函数中,表示跳出函数
// break用法
for i := 0;i<10;i++{
if i == 8{
break
}
fmt.Println(i) //输出0~7的数字
}
// continue用法
for i := 0;i<100;i++{
if i %2 == 0{
continue
}
fmt.Println("奇数是",i) //输出100以内的奇数
}
// goto用法
var n int = 30
if n > 20{
goto flat
}
fmt.Println("没有使用到goto")
flat:
fmt.Println("使用到goto")