Go 流程控制

北慕城南 提交于 2019-11-27 20:51:52
#### Go 程序流程控制***渡风渡尘缘,修行亦修心***在程序中主要有三大程序程控语句.1. 顺序控制2. 分支控制3. 循环控制 ##### 顺序控制程序从上到下逐行执行,中间没有任何判断和跳转
package main

import "fmt"

func main(){
   var a = 1
   var b = 2
   fmt.Println(a)
   fmt.Println(b)
   var c = 3
   var d = 4
   fmt.Println(c)
   fmt.Println(d)
}

  

---##### 分支控制分支控制就是让程序有选择的执行,有以下几种形式1. 单分支2. 双分支 3. 多分支  ######单分支 if 条件表达式{      代码块  }  当条件表达式为true时,会执行{} 中的代码,{} 必须有;
package main

import "fmt"

func main(){
   var num = 10
   var guess int
   fmt.Print("please guess the number: ")
   fmt.Scanln(&guess)
   if guess > num {
      fmt.Println("be smaller")
   }
   // 也支持在if 中直接定义一个变量使用
   if a := 11;a >num {
       fmt.Println("a > 10")
   }
}

  

单分支流程图如下:  

###### 双分支if 条件表达式{      代码块1  } else {      代码块2   }  当条件表达式成立时,执行代码块1,否则执行代码块2,{} 必须有;
package main

import "fmt"

func main(){
   var num = 10
   var guess int
   fmt.Print("please guess the number: ")
   fmt.Scanln(&guess)
   if guess > num {
      fmt.Println("be smaller")
   } else {
      fmt.Println("be bigger")
   }
}

  

双分支流程图如下:  

 ###### 多分支if 条件表达式1 {      代码块1  }  else if 条件表达式2 {      代码块2  } .... {      ......  } else {      代码块3  }  多分支判断流程如下:  (1). 先判断条件表达1是否成立, 如果为真, 就执行代码块1;   (2). 如果条件表达式1不成立,判断条件表达2是否成立,如果为真,执行代码块2;  (3). 依次类推;  (4). 如果所有的条件表达式都不成立,则执行else 语句块;  (5). else 不是必须的;  (6). 多分支只能有一个执行入口;  
package main

import "fmt"

func main(){
   var score int
   fmt.Print("please enter a grade: ")
   fmt.Scanln(&score)
   if score < 60 {
      fmt.Println("差")
   } else if score >=60 && score < 80 {
      fmt.Println("良好")
   } else if score >=80 && score < 100 {
      fmt.Println("优秀")
   }
}

  

多分支流程如下:   

 ###### 嵌套分支  在一个分支结构中又完整嵌套了另一个完整的分支结构,里面的分支称为内层分支,外面的分支称为外层分支;  if 条件表达式{      if 条件表达式{      }else {      }  }嵌套分支建议控制在3 层以内;  
package main

import "fmt"

func main(){
   var score int
   fmt.Print("please enter a grade: ")
   fmt.Scanln(&score)
   if score >= 60 {
      if score >= 80 {
         fmt.Println("优秀")
      } else {
         fmt.Println("良好")
      }
   } else {
      fmt.Println("差")
   }
}

  

###### switch 分支控制switch 语句用于根据不同条件执行不同动作,每个case 分支都是唯一的,从上到下匹配;  匹配项后面不需要加break ;   switch 表达式{  case 表达式1,表达式2:       语句块1  case 表达式3,表达式4:      语句块2  .... // 可以有多个case 语句  default:       语句块  }
package main

import "fmt"

func main(){
   var week int
   fmt.Print("please input a number[0-6]:")
   fmt.Scanln(&week)
   switch week {
   case 1:
      fmt.Println("Monday")
   case 2:
      fmt.Println("Tuesday")
   case 3:
      fmt.Println("Wednesday")
   case 4:
      fmt.Println("Thursday")
   case 5:
      fmt.Println("Friday")
   case 6:
      fmt.Println("saturday")
   case 0:
      fmt.Println("Sunday")
    //case 8.1: // 错误, 类型不一致
    //case 6:  // 错误, 常量值重复
   }
}

  

switch 分支如下:  

1. switch 执行的流程是先执行表达式,得到值,然后和case 表达式进行比较,如果相等,执行case 对应的语句块,然后退出switch 控制;  2. 如果switch 的表达式的值 没有和任何的case 表达式匹配上,则执行default 语句块,执行后退出switch 控制;  3. case 后的表达式可以有多个,使用逗号分隔;  4. case 语句块不需要写break, 默认执行完case 后退出switch 控制;  5. case/switch 后是一个表达式, 可以是常量值,变量,一个有返回值的函数;  6. case 后的表达式的值的数据类型, 必须和switch 的表达式的数据类型一致;  7. case 后面的表达式如果是常量的值,则不能重复;  8. default 不是必须的;  9. switch 后也可以不带表达式,类似if - else 分支使用;  10. 穿透-fallthrough , 如果在case 语句后增加fallthrough, 则会继续执行下一个case;  11. switch 也可以用来判断某个interface 变量中实际指向的变量类型;  
package main

import "fmt"

func main(){
   var week int
   fmt.Print("please input a number[0-6]:")
   fmt.Scanln(&week)
   switch {
   case week == 1:
      fmt.Println("Monday")
   case week ==2 :
      fmt.Println("Tuesday")
   case week == 3 :
      fmt.Println("Wednesday")
   case week == 4:
      fmt.Println("Thursday")
   }
   // 也可以判断
   switch  {
   case week > 5:
      fmt.Println("it is weekend")  
   case week <= 5:  
            fmt.Println("it is work day")  
            fallthrough  
   default:
      fmt.Println("it is work day")
   }
}

  


package main

import "fmt"

func main(){
   var i interface{}
   var a = "ss"
   i = a
   switch i.(type) {
   case int:
      fmt.Println("a type is int")
   case float64:
      fmt.Println("a type is float64")
   default:
      fmt.Println("unknow type")
   }
}

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!