GO语言语法(4) | 青训营

71 阅读4分钟

GO语言基础语法(4)

流程控制

[1]流程控制的作用:

流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。

[2]控制语句的分类:

控制语句分为三类:顺序、选择和循环。

  • “顺序结构"代表"先执行a,再执行b". 的逻辑。
  • "条件判断结构”代表"如果...则..的逻辑。
  • “循环结构"代表“如.果... 则再继续.."的逻辑。

三种流程控制语句就能表示所有的事情。不信,你可以试试拆分你遇到的各种事情。这三种基本逻辑结构是相互支撑的,它们共同构成了算法的基本结构,无论怎样复杂的逻辑结构,都可以通过它们来表达。所以任何一种高级语言都具备上述两种结构。

本章是大家真正进入编程界的“门票"。

[3]流程控制的流程: QQ图片20230826224206.png

if分支

单分支

[1]基本语法
if 条件表达式{
逻辑代码
}
当条件表达式为ture时,就会执行得的代码。

  • PS:条件表达式左右的0可以不写,也建议不写
  • PS: if和表达式中间,一定要有空格
  • PS:在Golang中,{}是必须有的,就算你只写一行代码。

[2]代码练习: 实现功能:如果口罩的库存小于30个,提示:库存不足

package main  
import " fmt"  
  
func main() {  
  
//实现功能:如果口罩的库存小于30个,提示:库存不足
var count int = 100  
//单分支:  
if count < 30{  
fmt. Println ("对不起,口罩存量不足")  
  
}  
  
//if后面表达式,返回结果一定是true或者false
//如果返回结果为true的话,那么{ }中的代码就会执行
//如果返回结果为false的话,那么{ }中的代码就不会执行
//if后面一定要有空格,和条件表达式分隔开来  
//{}-定不能省略  
//条件表达式左右的()是建议省略的  

在golang里,if后面可以并列的加入变量的定义:

if count := 20;count < 30 {    
   fmt. Println ("对不起,口罩存量不足")    
   }  
}

双分枝

[1]基本语法
if 条件表达式{
逻辑代码1
} else {
逻辑代码2
}
当条件表达式成立,即执行逻辑代码1,否则执行逻辑代码2。{}也是必须有的。

PS:下面的格式是错误的:
if条件表达式{
逻辑代码1
} else {
逻辑代码2
}

PS:空格加上,美观规范

package main  
import” fmt”  
  
func main(){  
  
//实现功能:如果口罩的库存小于30个,提示:库存不足,否则提示:库存充足
//定义口罩的数量:  
var count int = 70  
if count < 30 { //这个条件表达式返回的是true的话, 后面{}执行了
  fmt .Println("库存不足")   
} else {//count >= 30  
  fmt . Println("库存充足")   
}  
  
//双分支-定会选-走其中一个分支。
  
}

多分支

[1]基本语法
if 条件表达式1 {
逻辑代码1
} else if 条件表达式2 {
逻辑代码2
} ...... else {
逻辑代码n } 代码连起来看,分开是解释

package main  
import " fmt"  
  
func main(){  
  //实现功能:根据给出的学生分数,判断学生的等级:// >=90 -----A  
  // >=80 -----B  
  // >=70 ----C  
  // >=60 -----D  
  // <60-----  

方式1:利用if单分支实现:

  • ps:是利用多个单分支拼凑出多个选择,多个选择是并列的,依次从上到下执行,即使走了第一个分支,那么其他分支也是需要判断的
//定义一个学生的成绩:  
 var score int = 93  
//对学生的成绩进行判定:  
 if score >= 90 {  
 fmt.Println("您的成绩为A级别")
 }  
 if score >=80 && score < 90{
  fmt.Println("您的成绩为B级别")
 }   
if score>=70 && score < 80{ 
 fmt.Print1n("您的成绩为C级别")
 }   
if score >=60 && score < 79 { 
 fmt.Println("您的成绩为D级别")  
 }
if score < 60{  
  fmt.Println("您的成绩为E级别")
 }

方式2:利用多分枝

  • 优点:如果已经走了一个分支,下面的分支就不执行了
  • 建议你保留else的存在,只有有了else才会真正起到多选一的效果
 if score >= 90 {  
  fmt.Println("您的成绩为A级别")
 }  else if score >=80 {  //else隐藏:score < 90
  fmt.Println("您的成绩为B级别")
 } else if score >=70 {  //else隐藏:score < 80
  fmt.Println("您的成绩为C级别")
 } else if score >=60 {  //else隐藏:score < 70
  fmt.Println("您的成绩为D级别")
 } else {  //else隐藏:score < 60
  fmt.Println("您的成绩为E级别")
 }

进一步看为什么下面分支就不执行了
我输入26

if score > 10 {   
 fmt.println("aaa")
} else if score > 6 {
 fmt.println("bbb")
}
//输出aaa

switch分支

[1]基本语法:
switch表达式{
case值1,值.......
语句块1
case值3,值....
语句块2
..... default:
语句块
}
[2]代码练习:

  • switch后面是一个表达式,这个表达式的结果依次跟case进行比较,满足结果的话就执行后面的代码
  • default可以放在任何位置,用来兜底的分支,其他case都不走就走它
package main  
import "fmt"  
  
func main(){  
//实现功能:根据给出的学生分数,判断学生的等级
// >=90  
// >=80   
// >=70 -----C  
// >=60 -----D  
// <60----- E  
  
//给出一个学生分数:  
 var score int = 82  
//根据 分数判断等级:  
 switch score/10 {  
 case 10 :  
   fmt.Print1n("您的等级为A级")
 case 9 :  
   fmt.Print1n("您的等级为A级")
 case 8 :  
   fmt.Print1n("您的等级为B级")
 case 7 :  
   fmt.Print1n("您的等级为C级")
 case 6 :  
   fmt.Print1n("您的等级为D级")
 case  5:  
   fmt.Print1n("您的等级为E级")
 case 4 :  
   fmt.Print1n("您的等级为E级")
 case 3 :  
   fmt.Print1n("您的等级为E级")
 case 2 :  
   fmt.Print1n("您的等级为E级")
 case 1 :  
   fmt.Print1n("您的等级为E级")
 case 0 :  
   fmt.Print1n("您的等级为E级")
 default:
   fmt.Print1n("成绩有误")
  }
}

[3]注意事项:

  • (1) switch后是一 一个表达式(即:常量值、变量、-个有返回值的函数等都可以)
  • (2) case后的各个值的数据类型,必须和switch的表达式数据类型-致
  • (3) case后面可以带多个表达式,使用逗号间隔。比如case表达式1,表达式2...
  • (4) case后面的表达式如果是常量值(字面量),则要求不能重复
  • (5) case后面不需要带break ,程序匹配到-一个case后就会执行对应的代码块,然后退出switch,如果一个都匹配不到,则执行default
  • (6) default语句不是必须的.
  • (7) switch后也可以不带表达式,当做if分支来使用
  • (8) switch后也可以直接声明/定义一个变量,分号结束,不推荐
  • (9) switch穿透,利用allthrough关键字, 如果在case语句块后增加fallthrough ,则会继续执行下一个case,也叫switch穿透。