Go语言基础语法-流程控制语句
前言
程序是由语句构成,而流程控制语句 是用来控制程序中每条语句执行顺序的语句。可以通过控制语句实现更丰富的逻辑以及更强大的功能。几乎所有编程语言都有流程控制语句,功能也都基本相似。
其流程控制方式有
- 顺序结构
- 分支结构
- 循环结构
这里最简单最常用的就是顺序结构,即语句从上至下一一执行。
1. 分支语句
顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。
1.1 单分支语句
语法:
if 布尔表达式 { // 注意左花括号必须与表达式同行/* 在布尔表达式为 true 时执行 */
}
案例一:
package mainimport "fmt"func main() {var user = "jiangtao"var passwd = 123if user == "tao" && passwd == 123 {fmt.Println("登陆成功")}fmt.Println("登陆失败")
}
执行结果:
解析:
此处不能存在这种写法:
if user == “tao” && passwd = 123 这种写法会报错,在判断是否相等的时候用==,而不是=
改写下,让用户输入
package mainimport "fmt"func main() {var user stringvar passwd stringfmt.Println("请输入用户名:")fmt.Scanln(&user)fmt.Println("请输入密码:")fmt.Scanln(&passwd)if user == "laoxin" && passwd == "123" {fmt.Println("登陆成功")}fmt.Println("登陆失败")
}
但这个地方需要注意,因为是单分支语句,他输出登陆成功后,还是会输出登陆失败,。
但登陆失败一定不会执行登陆成功的语句。
如果要实现更多功能需要用到双分支语句:
双分支语句
语法错误
if 布尔表达式 { // 注意左花括号必须与表达式同行/* 在布尔表达式为 true 时执行 */
} else{}
案例一:
package mainimport "fmt"func main() {var user stringvar passwd stringfmt.Println("请输入用户名:")fmt.Scanln(&user)fmt.Println("请输入密码:")fmt.Scanln(&passwd)if user == "laoxin" && passwd == "123" {fmt.Println("登陆成功")} else {fmt.Println("登陆失败")}}
注意语法格式,{}的位置不能变
花括号里面可以写多行代码,这是一个语句体
3. 多分支语句
语法格式:
if 布尔表达式 { // 注意左花括号必须与表达式同行/* 在布尔表达式为 true 时执行 */
} else if{}else if{}else if{}else{}突然想起了香蕉这个单词, banananananana 最后一定要有个else,要不然上面的都不执行
案例一:
成绩是否合格
package mainimport "fmt"func main() {var score intfmt.Println("请输入你的成绩:")fmt.Scanln(&score)if score > 90 && score <= 100 {fmt.Println("成绩优秀")} else if score > 80 && score <= 90 {fmt.Println("成绩良好")} else if score > 60 && score <= 80 {fmt.Println("成绩及格")} else {fmt.Println("成绩不及格")}}
执行结果:
是否存在bug呢?
比如成绩是200分
所以成绩应该不能大于100,也不能小于0
修改v2版本
package mainimport "fmt"func main() {var score intfmt.Println("请输入你的成绩:")fmt.Scanln(&score)if score > 100 || score < 0 {fmt.Println("你输入的成绩超出了范围,请输入0-100之间的数字")} else if score > 90 && score <= 100 {fmt.Println("成绩优秀")} else if score > 80 && score <= 90 {fmt.Println("成绩良好")} else if score > 60 && score <= 80 {fmt.Println("成绩及格")} else {fmt.Println("成绩不及格")}}
执行结果
在想一个问题: 代码是从上往下进行,比如 一个成绩大于100, 就一定会执行第一个分支,不会执行到第二个分支。
所以我们写 score > 90 score< 100 这个小于100是否有必要。
很明显没有必要,可以改一下,改成score > 90 , 但这样少了90 。 所以需要改成score >=90
V3版
package mainimport "fmt"func main() {var score intfmt.Println("请输入你的成绩:")fmt.Scanln(&score)if score > 100 || score < 0 {fmt.Println("你输入的成绩超出了范围,请输入0-100之间的数字")} else if score >= 90 {fmt.Println("成绩优秀")} else if score >= 80 {fmt.Println("成绩良好")} else if score >=60 {fmt.Println("成绩及格")} else {fmt.Println("成绩不及格")}}
注意,代码不管有多少行,都是执行一个分支
其他分支语句 switch
语法:
switch var {case val1:...case val2:...default:...
}
switch语句也是多分支选择语句,执行哪一代码块,取决于switch后的值与哪一case值匹配成功,则执行该case后的代码块。
案例:
数字对应星期
package mainimport "fmt"func main() {var num intfmt.Scanln(&num)switch num {case 1:fmt.Println("今天星期一")case 2:fmt.Println("今天星期二")case 3:fmt.Println("今天星期三")case 4:fmt.Println("今天星期四")case 5:fmt.Println("今天星期五")case 6:fmt.Println("今天星期六")}
}
switch的特点:
1、switch比if else更为简洁
2、执行效率更高。switch…case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch…case不用像if…else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。
3、到底使用哪一个选择语句,代码环境有关,如果是范围取值,则使用if else语句更为快捷;如果是确定取值,则使用switch是更优方案
在上面的switch中如果出现不匹配的怎么办呢?
语法:
switch{case 1,2:default:
}
完善后案例代码:
package mainimport "fmt"func main() {var num intfmt.Scanln(&num)switch num {case 1:fmt.Println("今天星期一")case 2:fmt.Println("今天星期二")case 3:fmt.Println("今天星期三")case 4:fmt.Println("今天星期四")case 5:fmt.Println("今天星期五")case 6:fmt.Println("今天星期六")case 7, 0:fmt.Println("今天星期日")default:fmt.Println("数字不合法")}
}
总结
流程控制语句,在后面的课程中会用的比较多,是学习的重点。
Go语言基础语法-流程控制语句相关推荐
- java控制语句案例_Java基础语法—流程控制语句
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.所以,我们必须清楚每条语句的执行流程.而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能. 3.1 流程控制语句分类 ...
- 【机器视觉】 HDevelop语言基础(四)-流程控制语句
00. 目录 文章目录 00. 目录 01. 概述 02. if 03. if-else 04. elseif 05. while 06. until 07. for 08. continue 09. ...
- go语言打印日期_go语言基础:流程控制(4)-多重循环跳转控制
1.6 多重循环控制 1.6.1 概念解析 1)多重循环就是指将一个循环嵌套在另一个循环体内,就形成了嵌套循环.在外边的for循环称之为外层for循环,在里面的for循环称之为内层for循环.2)实质 ...
- [GO语言基础] 五.顺序控制语句和条件控制语句(if、else、switch)
作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Golang的 ...
- GO 语言基础语法一 (快速入门 Go 语言)
Go语言基础语法 一. golang 标识符,关键字,命名规则 二. golang 变量 三. golang 常量 四. golang 数据类型 五. golang 布尔类型 六. golang 数字 ...
- 【Day3 C语言基础语法学习-2】
Day3 C语言基础语法学习-2 一.输入输出函数 1.1 getchar()/putcgar() 1.1.1getchar() 1.1.2 putchar 1.2 gets()/puts() 1.2 ...
- 一起学Go吧! Go语言基础语法篇二
文章目录 前言 Go 语言指针 Go语言结构体 Go语言切片(Slice) Go 语言范围(Range) Go 语言Map(集合) Go 语言类型转换 Go 语言接口 Go 错误处理 Go并发 通道( ...
- Go语言基础语法--注释、基础结构2
章节 GO语言基础语法--注释.基础结构(重要) 1.GO语言基础语法---注释.基础结构 //程序所属的包,且必须在源文件代码第一行 package mainimport "fmt&quo ...
- Java语言程序设计 上机实验2 掌握Java的基本语言成分和流程控制语句。 掌握Java中数组的使用,理解引用数据类型。 掌握String类的使用。...
Java语言程序设计 上机实验2 实验目的: 掌握Java的基本语言成分和流程控制语句. 掌握Java中数组的使用,理解引用数据类型. 掌握String类的使用. 实验内容: 注:标(*)为选做内 ...
最新文章
- php文件数组,从文件到数组php
- MySql 修改外键 支持级联删除
- 渐统江湖的项目原型生成工具 -- Maven Archetype
- opencv-4.1.0-百度云盘下载链接-环境配置
- 计算机cpu 和 主板型号,CPU和主板怎么搭配?intel七代/八代/九代处理器和主板搭配对照表...
- 怎么在uefi解锁磁盘_系统重装时,如何秒判Windows启动是UEFI/Legacy?3步就够了!...
- Mysql使用存储过程与函数进行批量插入数据
- [原]Threads vs Processes in Linux 分析
- Tomcat源码分析(十)--部署器 转载
- 第 4 章(表达式和运算符)(4.1~ 4.7)
- 最新LAMP源码搭建网站平台PHP5.5.1 + Apache2.4.6 + mysql5.6.12
- 英文XP系统安装中文包
- python交互式程序设计导论小测验答案_最新网课答案2021学堂在线Python 交互式程序设计导论...
- 网页监控提醒工具WebMonitor
- VB6 TCP通讯服务端、客户端源码
- aes sm1 对比_SM1,SM2,SM3,SM4刨析
- Spring MVC 详解
- 计算机系统基本基本知识的说课稿,《计算机系统及工作原理》说课稿
- dowhile实现求水仙花数
- Word中公式变量解释时破折号对齐方法
热门文章
- 计算机辅助英语听说考试系统,英语听说训练平台
- lynx最新版本下载地址-2015-7
- 怎么用视频编辑软件把单声道变成立体声
- 幂函数、指数函数公式转换
- 迈动互联“三位一体”智慧医院系统建设不断创新
- 有人做脑电的情绪分类吗
- 仅仅有走过的路 才懂她的内容
- ISO, ASTM, JIS
- i386/libawt_xawt.so: libXext.so.6: cannot open shared object file
- 上面两点下面一个三角形_三角形的五心是三线共点的产物,聊一聊初中数学共点线的证明思路...