zoukankan      html  css  js  c++  java
  • Go 流程控制

    #### 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")
       }
    }
    

      最近在写微信公众号,欢迎大家关注,一同交流学习;  

  • 相关阅读:
    【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner
    【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView
    【转】js获取对象的所有属性和方法
    【转】10步大幅提升网站可访问性
    nignx 重启
    rails登录后跳转到登录前的路径
    淘宝的前端类库-KISSY
    Facebook开源的JavaScript库:React
    腾讯Web前端开发框架JX(Javascript eXtension tools)
    rails权限管理—devise+cancan+rolify
  • 原文地址:https://www.cnblogs.com/Mail-maomao/p/11376200.html
Copyright © 2011-2022 走看看