第五章 Golang程序流程控制

简介: 第五章 Golang程序流程控制

5.1 程序流程控制控件基本介绍

在程序中,程序运行的流程控制觉得程序是如何运行的,是我们必须掌握的,主要有三大流程控制语句。

  1. 顺序控制
  2. 分支控制
  3. 循环控制

5.2 顺序控制

顺序控制介绍

程序从上到下逐行地进行,中间没有任何判断和跳转。

5.3 分支控制

分支控制的基本介绍

分支控制就是让程序有选择执行,有下面三种形式

  1. 单分支
  2. 双分支
  3. 多分支

单分支

基本语法

if 条件表达式{

执行代码块

}

说明:当条件表达式为true时,就会执行{}的代码

注意{}是必须有的,就算你只写一行代码。

案例说明

请大家看个案例【ifDemo.go】

编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出“你的年龄大于18岁,要对自己的行为负责!”

var age int 
fmt.Println("请输入年龄:")
fmt.Scanln(&age)
if age > 18 {
    fmt.Println("你年龄大于18,要对自己的行为负责!")
}

双分支

基本语法

if 条件表达式{

执行代码块1

}else{

执行代码块2

}

案例

var age int 
fmt.Println("请输入年龄:")
fmt.Scanln(&age)
if age > 18 {
    fmt.Println("你年龄大于18,要对自己的行为负责!")
} esle {
  fmt.Println("你的年龄不大这次放过你了")
}
var x int = 4
var y int = 1
if(){
    if(y>2){
       fmt.Println(x+y)
    }
    fmt.Println("atguigu")
}else{
  fmt.Println("x is = ",x)
}
// 输出atguigu
var x int = 4
if x>2 
   fmt.Println("ok")
else 
   fmt.Println("hello")
// 编译错误,原因没有{}
var x int = 4
if x>2 {
   fmt.Println("ok")
}
else{
   fmt.Println("hello")
}
//  编译错误,else不能换行

嵌套分支

基本介绍

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支结构成为内层分支外面的分支结构称为外层分支。

基本用法

if 条件表达式{
  if 条件表达式{
  
  }else{
  }
}

说明:嵌套分支不宜过多,建议控制在3层内

5.4 switch 分支控制

基本的介绍

1.switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上到下逐一测试,知道匹配为止

2.匹配项后面也不需要再加break

基本语法

switch 表达式{
 case 表达式1,表达式2,...:
      语句块1
 case 表达式3,表达式4,...:
       语句块2
  // 这里可以有多个case语句
  default:
     语句块
}

switch的流程图

对上图的说明和总结

  1. switch 的执行流程是,先执行表达式,得到值。然后和case的表达式比较,如果相等,就匹配到,然后执行对应的case的语句块,然后退出switch控制
  2. 如果switch的表达式的值没有和任何的case的表达式匹配成功,则执行default的语句块。执行后退出switch的控制。
  3. golang的case后的表达式可以有多个,使用逗号隔离
  4. golang中的case语句块不需要写break,因为默认会有,即在默认情况下,当程序执行完case语句块后,就直接退出该switch控制结构。

switch快速入门案例

/*
编写一个程序,该程序可以介绍一个字符,比如:a,b,c,d,e,f,g a表示星期一,b表示星期二  根据用户的输入显示相依的信息  
要求使用switch语句完成
*/
var key byte
fmt.Println("请输入一个字符 a,b,c,d,e,f,g")
fmt.Scanf("%c",&key)
switch key{
  case 'a':
     fmt.Println("周一,猴子穿新衣")
  case 'b':
    fmt.Println("周二,猴子当小二")
  case 'c':
      fmt.Println("周三,猴子爬雪山")
  // ...
  default:
    fmt.Println("输入有误......")
}

switch的使用的注意事项和细节

  1. case/switch后是一个表达式(即:常量值,变量,一个有返回值的函数等都可以)
  2. case后的各个表达式的数据类型,必须和switch的表达式数据类型一致
  3. case后面可以带多个表达式,使用逗号间隔,比如case表达式1,表达式2…case后面的表达式如果是常量值(字面量),则要求不能重复
  4. case后面的表达式如果是常量值(字面量),则要求不能重复

  5. case后面不需要带break,程序匹配到一个case后悔执行对应的代码块,然后退出switch,如果一个都匹配不到,则执行default
  6. default语句不是必须的
  7. switch后面也可以不带表达式,类似if…else分支来使用【案例演示】

8. switch后也可以直接声明一个变量,分号结束,不推荐。【案例演示】

  1. switch穿透fallthrough,如果在case语句块后增加failthrough,则会继续执行下一个case,也叫switch穿透
  2. Type Switch:switch 语句还可以被用于type-switch来判断某个interface变量中实际指向的变量类型

switch的课堂练习

  1. 使用switch把小写类型的char型转为大写(键盘输入)。只转换a,b,c,d,e 其他的输入“other”
  • 使用switch把小写类型的char型转换为大写(键盘输入)
  • 只转换a,b,c,d,e, 其他的输出“other”
func main(){
  var char byte
  fmt.Println("请输入一个字符...")
  fmt.Scanf("%c",&char)
   switch char{
   case 'a':
      fmt.Println("A")
    case 'b':
      fmt.Println("B")
    case 'c':
      fmt.Println("C")
    case 'd':
      fmt.Println("D")
    case 'e':
      fmt.Println("E")
    default :
      fmt.Println("other")
  }
}
  1. 对学生成绩大于60分的,输出“合格”,低于60分的,输出“不合格”。(注:输入的成绩不能大于100)
var score float64
fmt.Println("请输入成绩")
fmt.Scanln(&score)
switch int(score/60){
  case 1:
      fmt.Println("及格")
  case 0:
      fmt.Println("不及格")
  default:
    fmt.Println("输入有误...")
}

switch和if的比较

1.如果判断的具体数值不多,而且符合整数,浮点数,字符,字符串这几种类型,建议使用switch语句,简介高效

2.其他情况,对区间判断和结果为bool类型的判断,使用if,if的范围更广

5.5 for循环控制

基本介绍

听其名而知其意,就是让我们的一段代码循环的执行。

一个需求

请大家看个案例【for】编写一个程序,可以打印10句

for i := 1;i<=10;i++ {
   fmt.Println("hellow,world",i)
}

for循环的基本语法

语法格式

for 循环变量初始化;循环条件;循环变量迭代{

循环操作(语句)

}

对上面的语法格式说明

a.对for循环来说,有四个要素

b. 循环变量初始化

c.循环条件

d.循环操作(语句),有人也叫循环体

e.循环变量迭代

for循环的顺序说明:

1.执行循环变量初始化 比如 i=1

2.执行循环条件, 比如 i<=10

3.如果循环条件为真,就执行循环操作 比如 fmt.Println(“…”)

4.执行循环变量迭代,比如 i++

5.反复执行2,3,4步骤,直到循环条件为false,就退出for循环

for循环执行流程分析

for循环的流程图

for循环的使用注意事项和细节讨论

1.循环条件是返回一个布尔值的表达式

2.for循环的第二种使用方式

for 循环判断条件{

// 循环执行语句

}

将变量初始化和变量迭代写到其他位置

j := 1
for j <= 10{
 fmt.println("hello,world",j)
 j++
}

3.for循环的第三种使用方式

for{
// 循环执行语句
}

上面的写法等价for;;{}是一个无限循环,通常需要配合break语句使用

k := 1
for{
   if k <= 10{
    fmt.Println("ok~")
  }else{
    break
  }
  k++
}

5.8 break的注意事项和使用细节

  1. break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是那一层语句块
lable2:
for i := 0; i<4;i++{
  // lable1: //设置一个标签
  for j := 0;j<10;j++{
    if j==2 {
      // break // break 默认会她跳出最近的for循环
      // break lable1
      break lable2 // j=0 j=1
    }
    fmt.Println("j=",j)
  } 
}
  1. 对以上案例说明
    break默认会跳出最近的for循环,break后面可以指定标签,跳出标签对应的for循环

5.9 跳转控制语句 -continue

基本介绍

continue语句用于结束本次循环,继续下次循环

continue语句出现在多层数量的循环语句体中时,可以通过标签指明要跳过的是哪一类循环,这个和前面的break标签的使用的规则一样

基本语法

{
  continue
}

continue流程图

5.10 跳转控制语句 goto

goto基本介绍

  1. Go语言的goto语句可以无条件地转移到程序中指定的行
  2. goto语句通常与条件语言配合使用,可以来实现条件转移,跳出循环体等功能。
  3. 在Go程序设计中一般不主张使用goto语句,以免造成流程的混淆,使理解和调试程序都产生困难

goto基本语法

goto label
......
label:statement

goto 的流程图

入门案例

func main(){
   fmt.Println("ok1")
   goto lable:
    fmt.Println("ok2")
    fmt.Println("ok3")
   lable:
     fmt.Println("ok4")
}

5.11 跳转控制语句-return

介绍

return 使用在方法或者函数中,表示跳出来所在的方法或函数,在讲解函数的时候,会详细的介绍

说明

  1. 如果return在普通的函数,则表示跳出该函数,即不再执行函数中return后面的代码,也可以理解成终止函数。
  2. 如果return是在main函数中,表示终止main函数,也就是说终止程序。

感谢大家观看,我们下次见

目录
相关文章
|
5月前
|
传感器 监控 物联网
golang开源的可嵌入应用程序高性能的MQTT服务
golang开源的可嵌入应用程序高性能的MQTT服务
299 3
|
11月前
|
NoSQL 小程序 Cloud Native
你是使用什么工具调试 golang 程序的?
你是使用什么工具调试 golang 程序的?
156 0
|
5月前
|
网络协议 Go 数据安全/隐私保护
golang开源的可嵌入应用程序高性能的MQTT服务
golang开源的可嵌入应用程序高性能的MQTT服务
392 2
|
28天前
|
Go
Golang语言流程控制之条件判断篇
这篇文章介绍了Golang语言中的流程控制语句,包括if分支和switch语句的多种使用方式,如单分支、双分支、多分支条件判断以及switch的fallthrough语法。
26 4
|
28天前
|
Go
Golang语言流程控制之for循环结构篇
这篇文章详细介绍了Golang语言中的for循环结构,包括for循环的基本写法、引入、原理、死循环案例,for range键值循环的使用,以及break、continue、goto和return关键字在循环控制中的运用,并提供了练习题来加深理解。
16 0
Golang语言流程控制之for循环结构篇
|
2月前
|
监控 测试技术 API
|
2月前
|
监控 Java 测试技术
|
2月前
|
存储 安全 Go
|
3月前
|
编译器 Go C语言
通过例子学习在golang中调试程序
【7月更文挑战第4天】Go语言支持使用cgo进行汇编调试,官方文档在golang.org/doc/asm。注意,调试Go运行时可能遇到变量不可用或行号错误,需谨慎使用step命令。
63 1
通过例子学习在golang中调试程序
|
5月前
|
Go 开发者
Golang深入浅出之-Go语言流程控制:if、switch、for循环详解
【4月更文挑战第21天】本文介绍了Go语言中的流程控制语句,包括`if`、`switch`和`for`循环。`if`语句支持简洁的语法和初始化语句,但需注意比较运算符的使用。`switch`语句提供多分支匹配,可省略`break`,同时支持不带表达式的形式。`for`循环有多种形式,如基本循环和`for-range`遍历,遍历时修改原集合可能导致未定义行为。理解并避免易错点能提高代码质量和稳定性。通过实践代码示例,可以更好地掌握Go语言的流程控制。
43 3
Golang深入浅出之-Go语言流程控制:if、switch、for循环详解