跳至主要內容

流程控制

Mr.Liu大约 3 分钟Go

流程控制

流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉"

Go 语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。

条件语句

if-else

条件语句用于根据给定的条件来执行不同的代码块。

package main

import "fmt"

func main() {
    age := 18
    if age >= 18 {
        fmt.Println("You are an adult.")
    } else {
        fmt.Println("You are a minor.")
    }

}

if的另外一种写法,区别是 age是局部变量

package main

import "fmt"

func main() {
    if age := 18; age >= 18 {
        fmt.Println("You are an adult.")
    } else {
        fmt.Println("You are a minor.")
    }

}

switch

switch​ 语句根据表达式的值来执行不同的分支,同时一个分支可以有多个值。

package main

import "fmt"

func main() {
    switch day := "Wednesday"; day {
    case "Monday":
        fmt.Println("It's the beginning of the week.")
    case "Friday", "Saturday":
        fmt.Println("It's the end of the week.")
    default:
        fmt.Println("It's a regular day.")
    }
}

tip:break可以不写,也能够跳出case,而不会执行其它的分支。

fallthrough​ 用于控制 switch​ 语句中的分支穿透行为。当在一个 case​ 分支中使用了 fallthrough​ 关键字时,程序会继续执行下一个 case​ 分支,而不会像通常情况下自动跳出 switch​ 语句。

package main

import "fmt"

func main() {
    num := 2

    switch num {
    case 1:
        fmt.Println("One")
        fallthrough
    case 2:
        fmt.Println("Two")
        fallthrough
    case 3:
        fmt.Println("Three")
    default:
        fmt.Println("Other")
    }
}

fallthrought​ 只能穿透紧挨着的一层,不会一直穿透,但是如果每一层都写的话,就会导致每一层都进行穿透

循环语句

循环语句允许你多次执行一段代码,可以用于遍历集合、执行重复操作等。

Go语言中的所有循环类型均可使用for​关键字来完成

  • break​ 用于退出当前循环。
  • continue​ 用于跳过当前循环迭代,继续下一次迭代。
package main

import "fmt"

func main() {
    for i := 1; i <= 5; i++ {
        if i == 3 {
            continue
        }
        fmt.Println(i)
        if i == 4 {
            break
        }
    }
}

使用 for​ 关键字创建一个无限循环,需要在循环体内使用 break​ 或其他条件(return​、goto​、pantic​)来终止循环。

package main

import "fmt"

func main() {
    count := 0
    for {
        fmt.Println("Infinite loop")
        count++
        if count >= 3 {
            break
        }
    }
}

标签是一个标识符,用于标记代码中的特定位置

在多层循环中,如果你想要在内层循环中使用 break​ 语句来直接结束所有循环,可以借助标签(label)来实现这个目标。

package main

import "fmt"

func main() {
    outerLoop:
    for i := 1; i <= 3; i++ {
        fmt.Printf("Outer loop iteration: %d\n", i)

        for j := 1; j <= 3; j++ {
            fmt.Printf("    Inner loop iteration: %d\n", j)
      
            if i == 2 && j == 2 {
                // 使用标签和 break 结束所有循环
                break outerLoop
            }
        }
    }
}

当然,还可以借助goto实现这个目标,但是要小心使用,确保代码的可读性和可维护性

package main

import "fmt"

func main() {
    for i := 1; i <= 3; i++ {
        fmt.Printf("Outer loop iteration: %d\n", i)

        for j := 1; j <= 3; j++ {
            fmt.Printf("    Inner loop iteration: %d\n", j)

            if i == 2 && j == 2 {
                goto endLoop
            }
        }
    }

endLoop:
    fmt.Println("All loops ended.")
}