for循环里的if语句中break_Go语言极简教程 - 第五篇 控制语句
if语句
语法
IfStmt = "if" [ SimpleStmt ";" ] Expression Block [ "else" ( IfStmt | Block ) ] .
特点
- if后面的条件判断表达式不需要小括号括起来。
- 左大括号{必须放在和if/else if同行的行尾。
- if后面可以带一个简单语句,该语句可以声明新的变量并初始化或给已有变量赋值,新声明的变量仅在该if分支、else if分支以及else分支可见。该简单语句和后面的条件判断表达式用“;”分隔。
- else if和else必须与上一个if分支的右大括号}在同一行。
- Go语言没有条件运算符(也称三目运算符,a>b?a:b)。此时只能用if else来替换。
最佳实践
- 尽量减少if条件表达式的复杂度,以提高代码可读性。如果条件表达式逻辑较为复杂,可以将判断逻辑放到一个函数里,该函数返回判断结果。
- 尽可能的减少if语句的嵌套层次,嵌套层次越多,代码可读性就越差,可维护性也越低。可以在if分支内使用return语句来提前结束函数执行,减少if嵌套层次,使代码结构变得扁平。
优化前代码示例:
优化后代码示例:
switch语句
语法
SwitchStmt = ExprSwitchStmt | TypeSwitchStmt .ExprSwitchStmt = "switch" [ SimpleStmt ";" ] [ Expression ] "{" { ExprCaseClause } "}" .ExprCaseClause = ExprSwitchCase ":" StatementList .ExprSwitchCase = "case" ExpressionList | "default" .
特点
- switch语句会根据传入的参数检测并执行符合条件的case分支。
- 和if语句一样,switch后面也可以带一个简单的初始化或赋值语句,语句中新声明的变量该在switch语块内可见。
- switch条件表达式的值可以是任意支持相等比较运算的类型变量。
- switch支持default分支,当所有case分支都未被匹配到,则执行default分支,default分支出现的位置和顺序不影响case的分支条件判断。
- switch后面的表达式是可选的。如果switch后面没条件判断表达式,则每个case子句的表达必须是条件判断表达式,而不是一个值。
- 可以通过fallthough语句强制执行下一个case分支,无论该case分支是否符合条件。
for语句
与其它语言不同,Go语言只支持一个循环结构语法,即for语句。不像其它语言除for外有do, while以及foreach等丰富的循环结构语法。
Go语言中for语句存在多种形式
形式一
ForClause = [ InitStmt ] ";" [ Condition ] ";" [ PostStmt ] .InitStmt = SimpleStmt .PostStmt = SimpleStmt .
这种形式与其它语言的for循环结构相同。
形式二
ForStmt = "for" [ Condition | ForClause | RangeClause ] Block .Condition = Expression .
这种形式与其它语言的while(expr)循环结构相同。
形式三
RangeClause = [ ExpressionList "=" | IdentifierList ":=" ] "range" Expression .
这种形式与其它语言的foreach结构相同。
break关键字
可以使用break关键字强制跳出for、switch、select语句的执行。
在有多个嵌套层的for、switch、select结构中,break跳出当前所在的嵌套层,也可以使用break Label跳出到外层。
continue关键字
continue关键字用于跳出for循环的本次迭代,直接跳到下一次迭代的PostStmt语句处开始执行。
和break关键字一样,在有多个嵌套层的for循环结构中,continue跳到当前所在的for循环层,也可以使用continue Label跳出到外层。
标签和跳转
标签语法
Label: Statement
只能在函数内部声明Label
goto
语法
GotoStmt = "goto" Label .
特点
- goto语句只能在函数内部跳转。
- goto语句不能跳过内部变量声明语句。
- goto语句只能跳到同级作用域或者上层作用域,不能跳到内部作用域内。
for循环里的if语句中break_Go语言极简教程 - 第五篇 控制语句相关推荐
- 职中心得体会300字高一计算机,中职生自我鉴定300字五篇
[www.hywsbj.com--总结汇报] [导语]自我鉴定正文由前言.优点.缺点.今后打算四部分构成.自我鉴定的正方行文,可用一段式,也可用多段式.要实事求是,条理清晰,用语准确.本站为大家整理的 ...
- python中if控制语句_Python 极简教程(十二)逻辑控制语句 if else
计算机软件之所以能够对不同的情况进行不同的处理,就是我们在编码的时候,通过逻辑控制语句,告诉软件在不同的情况下应该做什么处理. 比如我们在登录的时候,那么当你输入正确的账号密码和错误的账号密码,完全是 ...
- matlab显示循环里进度,关于matlab中的waitbar(用于显示程序运行的进度)
关于matlab中的waitbar(用于显示程序运行的进度) 应用1: h = waitbar(x,'message'); %其中x必须为0到1之间的数,message为显示的信息,其实这个x大于1也 ...
- java方法中的循环里的变量_Java中循环声明变量方法
Java循环声明变量 之前想这样做,但是网上一直搜索不到,下面是我的方式 项目中 // 得到需要查询外表的数量,然后分别创建缓存,插入数据多的时候如果编码在缓存里面,就不需要再去查询数据库了.key: ...
- go get 的不再src目录中_GO语言基础进阶教程:包的使用
Go语言使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java .python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得& ...
- 易语言新手入门教程第五课 - 计次循环命令讲解与实战
易语言计次循环首命令: 调用格式: 〈无返回值〉 计次循环首 (整数型 循环次数,[整数型变量 已循环次数记录变量]) - 系统核心支持库->流程控制 英文名称:counter 执行本命令将把循 ...
- FPGA基础知识极简教程(5)什么是锁存器以及如何在FPGA开发中避免生成锁存器?
博文目录 写在前面 正文 什么是D锁存器? 锁存器是如何生成的? 如何避免生成锁存器? 参考资料 交个朋友 写在前面 个人微信公众号: FPGA LAB 个人博客首页 注:学习交流使用! 本文我们将讨 ...
- Linux环境中,GitHub的配置使用极简教程
一.环境 1.1 操作系统(其他发行版亦可): [root@gysl ~]# cat /etc/centos-release CentOS Linux release 7.5.1804 (Core) ...
- 【预告中】ESP 保姆级教程 疯狂点灯篇 —— 案例:ESP8266 + LED + 按键 + OneNet物联网平台 + Web应用
快速导读 1.项目说明 2.项目准备 2.1 软件准备 2.2 硬件准备 2.2.1 硬件材料 2.2.2 硬件连线 3.项目细节 3.1 设备端代码 3.2 设备端代码细节过程 4.项目结果 手把手 ...
最新文章
- bzoj 3028 生成函数
- mysql mac客户端: sequel,mysql-workbench
- css 小经验: 重构css的优化与技巧
- 第一次运行Spring Boot有感
- poj 1006(中国剩余定理)
- Django:序列化的几种方法
- CF535C Tavas and Karafs 二分 + 结论
- html动感相册怎么转成视频,ps把相片或图片制作成一个动感的相册视频效果
- Java发送邮件换行问题
- Ilasm And Ildasm Practice
- java 数组写入txt_java编程,如何把一个数组中的内容写入一个txt文档中
- 寒霜朋克计算机丢失,寒霜朋克无法启动运行解决方法 寒霜朋克不能运行怎么办?...
- 『C++』endl、ends和flush的区别
- 北理计算机实验18,18北理应用统计经验贴
- 解决$ is not defined 的几种方法
- MSP430 5xx/6xx 定时器A增计数模式编程实例
- NTIRE2020~21 SISR超分 总结
- You are using pip version 9.0.1, however version 22.1.2 is available. You should consider upgrading
- (算法)求数组中数字组合(可多值组合)相加最接近目标数的组合(可能多个)
- shell脚本获取OpenSSH版本