从零开始学Go之基本(四):流程控制语句

Go中的流程控制语句有:if(else),for,switch

 

if:(判断流程控制)

关键字 if 是用于测试某个条件(布尔型或逻辑型)的语句,如果该条件成立,则会执行 if 后由大括号括起来的代码块,否则就忽略该代码块继续执行后续的代码(跟C不同,Go中的if不需要加括号)

单个判断:

if 判断条件 {
​
 执行代码块
​
}

 

如果要增加一个条件不满足时的情况,可以增加else以及后面的代码块,if 和 else 后的两个代码块是相互独立的分支,只能执行其中一个

if 判断条件 {
​
 执行代码块1
​
} else {
​
 执行代码块2
​
}

 

如果需要三个或三个以上的分支判断的情况,则要在中间else后再加if的判断的方式,三个情况只能执行一个

if 判断条件1 {
​
 执行代码块1
​
} else if 判断条件2 {
​
 执行代码块2
​
} else {
​
 执行代码块3
​
}

 

if-else可以嵌套,else的匹配跟C一样是匹配最近大括号{}对应的if

嵌套:

if 判断条件1 {
​
  if 判断条件2 {
​
  执行代码块1
​
 }
​
} else {//匹配判断条件1的if
​
 执行代码块2
​
}

在if执行判断前可以增加一个执行语句,用;号分隔执行语句和判断语句,会先执行执行语句后再执行判断语句

 

特殊写法:

if 执行语句;判断语句{
 执行代码块
}

在Go中有严格的格式控制,if跟对应左大括号{必须在同一行,右大括号}和else/else-if必须在同一行

 

格式控制:

if ten := 10; ten < 10 { //在同一行
 fmt.Print("<10")
} else { //在同一行
 fmt.Print(">=10")
}

 

for:(循环流程控制)

Go 只有一种循环结构:for 循环。

基本的 for 循环由三部分组成,它们用分号隔开:

  • 初始化语句:在第一次迭代前执行
  • 条件表达式:在每次迭代前求值
  • 后置语句:在每次迭代的结尾执行

初始化语句通常为一句短变量声明,该变量声明仅在 for`语句的作用域中可见,一旦条件表达式的布尔值为 false,循环迭代就会终止

for 初始化语句;条件表达式;后置语句 {
​
 循环语句块
​
}

同if一样,可以省略最外层的小括号(),而且初始化语句和后置语句可以省略。

 

在Go中没有while和do-while语句,而是通过没有分号的for来实现,在for中增加一个if判断以及break来充当原来while中的判断条件。

for {//while

 if 退出判断条件 {

  break

 }

 循环语句

}

for {//do-while

 循环语句 
 
 if 退出判断条件 {    
 
 break  
  
 }
  
}

break:跳出当前循环,无视for条件约束;

continue:跳过当次循环,仍然执行后置语句和判断条件表达式,如符合条件会继续执行for语句;

 

标签定义:

标签名:

OneLoop://这行就是标签
for {
​
 if 退出判断条件 {
​
  break
​
 }
​
}

 

goto、break、continue都可以配合标签来完成对特定循环的跳转、跳出、跳过。

func main() {
 for x := 0; x < 10; x++ {
   for y := 0; y < 10; y++ {
     if y == 2 {
       // 跳转到标签
       goto breakHere
     }
   }
 }
 // 手动返回, 避免执行进入标签
 return
breakHere:// 标签
 fmt.Println("done")
}

 

 

switch:(分支流程控制)

switch相当于用来处理大量重复的if-else语句的代替语句。

switch 表达式 {
​
 case 对表达式的判断:{
  语句
 }
​
}

 

判断i

 var i = 8
 switch i {
 case 8:
  {
   fmt.Println("=8")
   //fallthrough//输入后会继续运行下一个case
  }
 case -1,0://多个情况结果相同可以放在一起用,来分隔
  {
   fmt.Println("none")
  }
 default:
  {
   fmt.Println("!=8")
  }
 }

①其中default是可选的但是一个switch只能有一个,是用于对所有case都不符合的情况进行的处理。

②多个情况结果相同可以放在一起用,来分隔。

③当switch未声明表达式默认为true。

跟C不同,Go的switch语句内置了break,各case之间独立,运行完即退出,如果需要继续按case运行则需要fallthrough关键字

posted @ 2019-06-23 19:21  VingB2by  阅读(155)  评论(0编辑  收藏  举报