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 = E 特点
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跳出到外层。
标签和跳转
标签语法
go语言安装教程Label: Statement
只能在函数内部声明Label
goto
语法
GotoStmt = "goto" Label .
特点
goto语句只能在函数内部跳转。
goto语句不能跳过内部变量声明语句。
goto语句只能跳到同级作⽤域或者上层作⽤域,不能跳到内部作⽤域内。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论