• Go语言之流程控制


    程序的流程控制决定了程序是如何执行的,主要有三大流程控制:

    • 顺序控制
    • 分支控制
    • 循环控制

    一、顺序控制

    顺序控制时最简单的一种流程控制,强调代码从上到下依次执行,中间没有任何顺序和跳转。注意的是Go语言中变量采用前向引用。如:

    func main() {
        var a int = 1 // 声明变量a
        var b int = a  //使用变量a
        fmt.Println(b)
    
    }        

     上面就是先定义变量再使用,是正确的做法,相反如果先使用a而后再定义a就是错误的方法。

    二、分支控制

     分支控制就是让程序有选择的执行,主要分为三类:

    • 单分支
    • 双分支
    • 多分支

    (一)单分支

    1、基本语法

    if <condition> {
        // 执行代码块
      
    }

    2、实例

    package main
    
    import "fmt"
    
    func main() {
        a := 10
    
        if a > 5 {
            fmt.Println("大于5")
        }
    
    }

    (二)双分支控制

    1、基本语法

    if <condition> {
        // 执行代码块
      
    } else {
       // 执行代码块
    }

    2、实例

    package main
    
    import "fmt"
    
    func main() {
        a := 10
    
        if a > 5 {
            fmt.Println("大于5")
        } else {
            fmt.Println("小于等于5")
        }
    
    }

    (三)多分支控制

    1、基本语法

    if <condition1> {
        // 执行代码块1
      
    } else if <condition2> {
       // 执行代码块2
    
    } else {
       // 执行代码块3
    
    }

      先判断条件1是否成立,如果为真就执行代码块1;如果条件1为假就去判断条件2是否成立,如果条件2为真,就执行代码块2;如果所有的条件都不为真就执行else中的代码块。

      多分支只能有一个执行入口。

    2、实例

    package main
    
    import "fmt"
    
    func main() {
        a := 10
    
        if a < 5 {
            fmt.Println("小于5")
        } else if a >= 5 && a < 10{
            fmt.Println("大于等于5并且小于10")
        } else {
            fmt.Println("大于10")
    
        }
    
    }

    (四)嵌套分支

    在一个分支结构中完整的嵌套另一个完整的分支结构,里面的分支结构被称为内层分支,外面的分支结构被称为外层分支。

    • 基本语法

    if <condition1> {
         
        if <condition1.1> {
      
        } else {
    
           }
        
    }  
    ...

    三、switch分支控制

    switch语句用于基于不同条件执行不同的动作,每一个case分支都是唯一的,从上到下逐一测试,直到匹配为止。匹配项后面不需要再加break.

    1、基本语法

    package main
    
    import "fmt"
    
    func main() {
        
        switch <condition> {
            case <condition1>,<condition2>...:
                // 代码块1
    
            case <condition3>,<condition4>...:
                // 代码块2
    ...
    default: // 代码块3 } }
    • switch执行流程是,限制性condition,得到值,然后和case的表达式进行比较,如果相等就匹配到,然后执行对应的case代码块,然后退出switch控制
    • 如果switch表达式的值与任何的case表达式没有匹配成功,就执行default代码块,执行后退出switch流程控制
    • Go语言中case后的表达式可以有多个,中间使用逗号隔开
    • Go语言中case代码块中不需要使用break,因为默认会存在,当执行完case代码块中就会之间退出switch控制

    2、实例

    package main
    
    import "fmt"
    
    func main() {
        
        score := 90
    
        switch {
            case score >= 90:
                fmt.Println("优秀...")
    
            case score >= 80 && score < 90:
                fmt.Println("良好...")
            default:
                fmt.Println("一般...")
        }
    
    
    }

     另外也可以直接在switch后直接定义变量:

    package main
    
    import "fmt"
    
    func main() {
        
        switch score := 90; {
            case score >= 90:
                fmt.Println("优秀...")
    
            case score >= 80 && score < 90:
                fmt.Println("良好...")
            default:
                fmt.Println("一般...")
        }
    
    
    }

    如果在case代码块中添加fallthrough会进行穿透,会执行下一个case,默认穿透一层。

    package main
    
    import "fmt"
    
    func main() {
        
        switch score := 90; {
            case score >= 90:
                fmt.Println("优秀...")
                fallthrough // 优秀...良好...
    case score >= 80 && score < 90:
                fmt.Println("良好...")
                
            default:
                fmt.Println("一般...")
        }
    
    
    }

    3、switch与if比较

    • 如果判断的具体数值不多,建议使用switch语句
    • 对区间判断为bool类型,建议使用if语句

    四、循环控制

    Go语言之循环控制 - iveBoy - 博客园 (cnblogs.com)

    作者:iveBoy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    关于CSS自文档的思考_css声明式语言式代码注释
    html5中contenteditable属性如果过滤标签,过滤富文本样式
    web前端工程化/构建自动化
    Python连载19-装饰器
    Java连载1-概述&常用的dos命令
    HTML连载18-id选择器与class区别&class选择器使用思路&后代选择器
    Python连载18-closure闭包解释及其注意点
    HTML连载17-id选择器&类选择器
    Python连载17-排序函数&返回函数的函数
    HTML连载16-颜色控制属性2&标签选择器
  • 原文地址:https://www.cnblogs.com/shenjianping/p/15520495.html
Copyright © 2020-2023  润新知