一、流程控制简述
一)流程控制的作用
流程控制语句是用来控制程序中语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑块
二)流程控制的分类
控制语句分为三类:顺序、选择和循环
- 顺序结构:依次执行:先执行a,再执行b的逻辑
- 条件判断结构:若...,则...的逻辑
- 循环结构:若...,则继续...的逻辑
这三种基本逻辑是相互支撑的,他们构成了算法基本机构,无论怎样复杂的逻辑结构,都可以通过他们来表达。所以任何一种高级语言都要局部上述两种结构。
三)流程控制的流程
二、详解流程控制语句
一)分支结构
1、if分支
- 表达式左右的 () 是建议省略的
- if 后面可以并列加入变量的定义的 使用分号 隔开 : if count := 10; count < 30 { }
单分支
if 条件表达式 {
逻辑代码
}
双分支
if 条件表达式 {
逻辑代码
}
else {
逻辑代码
}
多分支
if 条件表达式1 {
逻辑代码1
} else if 条件表达式2 {
逻辑代码2
}
......
else {
逻辑代码n
}
2、switch分支
基本语法
switch 表达式 {
case 值1, 值2, .....:
语块1
case 值3, 值4, .....:
语块2
......
default:
语句n
}
注意事项
- switch后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)
- case后的各个值的数据类型,必须和switch的表达式数据类型一致
- case后可以带多个表达式,使用逗号间隔。例: case 表达式1, 表达式2, ....
- case后的表达式若是常量值(字面值),则要求不能重复
- case 后面不需要带break,程序匹配case后就会执行对应的代码块,然后退出switch,若一个都匹配不到,则执行default
- default分支不是必须的
- default分支可以放在任何位置,不一定非放到最后
- switch后也可以不带表达式,当做if分支来使用
- switch后也可以直接声明和定义一个变量,分号结束(不推荐)
- switch穿透,利用fallthrough 关键字,若在case语句块后增加fallthrough,则会继续执行下一个case,也叫switch穿透
二)循环结构
1、for循环
1)一般语法结构
for (初始化表达式; 布尔表达式; 迭代因子) {
循环体;
}
- 初始化部分设置循环变量的初值
- 条件判断部分为任意布尔表达式
- 迭代因子控制循环变量的增减
- for的出事表达式,不能用var定义变量的形式,要用 :=
package main
import "fmt"
func main() {
var sum int = 0
/*
for 初始表达式; 布尔表达式; 迭代因子 {
循环体
}
*/
for i := 0; i < 100; i++ {
sum += i
}
fmt.Println("100之内整数求和sum:", sum)
}
2)for range
for range 结构时Golang语言特有的一种迭代结果,在许多情况下都非常有用,for range 可以遍历数组、切片、字符串、map及通道。
for range语法上类似于其他语言中的 for each 语句,一般形式为
for key, val := range coll {
...
}
范例
// 定义一个字符串
var str string = "hello world! 你好,世界!"
// 方式一:使用普通for循环:按照字符串的索引进行循环
//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)
}
** 执行结果如下**
索引为: 0, 具体的值为:h
索引为: 1, 具体的值为:e
索引为: 2, 具体的值为:l
索引为: 3, 具体的值为:l
索引为: 4, 具体的值为:o
索引为: 5, 具体的值为:
索引为: 6, 具体的值为:w
索引为: 7, 具体的值为:o
索引为: 8, 具体的值为:r
索引为: 9, 具体的值为:l
索引为: 10, 具体的值为:d
索引为: 11, 具体的值为:!
索引为: 14, 具体的值为:
索引为: 15, 具体的值为:你
索引为: 18, 具体的值为:好
索引为: 21, 具体的值为:,
索引为: 24, 具体的值为:世
索引为: 27, 具体的值为:界
索引为: 30, 具体的值为:!
** 总结:**
- 普通for循环,无法将中文正常输出
- for range,会将中文正常输出
2、关键字
break
- switch语句中,每个case分支后都用break结束当前分支,但是在go中break可以省略(不写)
- break可以结束正在执行的循环:结束离它最近的循环
- 标签的使用:若定义的标签没有使用到的话,那么标签不用加,否则标错(标签定义未使用)
continue
- 结束本地循环,继续下一次循环
goto
- 作用:可以无条件地转移到程序的指定的行
- 使用场景:通常与条件语句配合使用,可用来实现条件转移
- 在go程序设计时,一般不建议使用goto语句,以免造成程序流程的混乱
return
- 结束当前函数(方法)