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语言极简教程 - 第五篇 控制语句相关推荐

  1. 职中心得体会300字高一计算机,中职生自我鉴定300字五篇

    [www.hywsbj.com--总结汇报] [导语]自我鉴定正文由前言.优点.缺点.今后打算四部分构成.自我鉴定的正方行文,可用一段式,也可用多段式.要实事求是,条理清晰,用语准确.本站为大家整理的 ...

  2. python中if控制语句_Python 极简教程(十二)逻辑控制语句 if else

    计算机软件之所以能够对不同的情况进行不同的处理,就是我们在编码的时候,通过逻辑控制语句,告诉软件在不同的情况下应该做什么处理. 比如我们在登录的时候,那么当你输入正确的账号密码和错误的账号密码,完全是 ...

  3. matlab显示循环里进度,关于matlab中的waitbar(用于显示程序运行的进度)

    关于matlab中的waitbar(用于显示程序运行的进度) 应用1: h = waitbar(x,'message'); %其中x必须为0到1之间的数,message为显示的信息,其实这个x大于1也 ...

  4. java方法中的循环里的变量_Java中循环声明变量方法

    Java循环声明变量 之前想这样做,但是网上一直搜索不到,下面是我的方式 项目中 // 得到需要查询外表的数量,然后分别创建缓存,插入数据多的时候如果编码在缓存里面,就不需要再去查询数据库了.key: ...

  5. go get 的不再src目录中_GO语言基础进阶教程:包的使用

    Go语言使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java .python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得& ...

  6. 易语言新手入门教程第五课 - 计次循环命令讲解与实战

    易语言计次循环首命令: 调用格式: 〈无返回值〉 计次循环首 (整数型 循环次数,[整数型变量 已循环次数记录变量]) - 系统核心支持库->流程控制 英文名称:counter 执行本命令将把循 ...

  7. FPGA基础知识极简教程(5)什么是锁存器以及如何在FPGA开发中避免生成锁存器?

    博文目录 写在前面 正文 什么是D锁存器? 锁存器是如何生成的? 如何避免生成锁存器? 参考资料 交个朋友 写在前面 个人微信公众号: FPGA LAB 个人博客首页 注:学习交流使用! 本文我们将讨 ...

  8. Linux环境中,GitHub的配置使用极简教程

    一.环境 1.1 操作系统(其他发行版亦可): [root@gysl ~]# cat /etc/centos-release CentOS Linux release 7.5.1804 (Core) ...

  9. 【预告中】ESP 保姆级教程 疯狂点灯篇 —— 案例:ESP8266 + LED + 按键 + OneNet物联网平台 + Web应用

    快速导读 1.项目说明 2.项目准备 2.1 软件准备 2.2 硬件准备 2.2.1 硬件材料 2.2.2 硬件连线 3.项目细节 3.1 设备端代码 3.2 设备端代码细节过程 4.项目结果 手把手 ...

最新文章

  1. bzoj 3028 生成函数
  2. mysql mac客户端: sequel,mysql-workbench
  3. css 小经验: 重构css的优化与技巧
  4. 第一次运行Spring Boot有感
  5. poj 1006(中国剩余定理)
  6. Django:序列化的几种方法
  7. CF535C Tavas and Karafs 二分 + 结论
  8. html动感相册怎么转成视频,ps把相片或图片制作成一个动感的相册视频效果
  9. Java发送邮件换行问题
  10. Ilasm And Ildasm Practice
  11. java 数组写入txt_java编程,如何把一个数组中的内容写入一个txt文档中
  12. 寒霜朋克计算机丢失,寒霜朋克无法启动运行解决方法 寒霜朋克不能运行怎么办?...
  13. 『C++』endl、ends和flush的区别
  14. 北理计算机实验18,18北理应用统计经验贴
  15. 解决$ is not defined 的几种方法
  16. MSP430 5xx/6xx 定时器A增计数模式编程实例
  17. NTIRE2020~21 SISR超分 总结
  18. You are using pip version 9.0.1, however version 22.1.2 is available. You should consider upgrading
  19. (算法)求数组中数字组合(可多值组合)相加最接近目标数的组合(可能多个)
  20. shell脚本获取OpenSSH版本

热门文章

  1. Word中使用代码高亮插件
  2. 【连载】【FPGA黑金开发板】NIOS II那些事儿--编程风格(三)
  3. Linux 高级I/O之poll函数及简单服务器客户端编程
  4. 无法删除当前已连接的用户处理办法
  5. FishC01 讲:我和 Python 第一次亲密接触
  6. Python删除list里面的重复元素的俩种方法
  7. 学习shell脚本之乘法口诀
  8. leetcode笔记(一)309. Best Time to Buy and Sell Stock with Cooldown
  9. MarkdownPad 2 常用快捷键
  10. android应用程序的混淆打包(转)