Fork me on GitHub

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)

 

posted @ 2021-11-08 20:13  iveBoy  阅读(100)  评论(0编辑  收藏  举报
TOP