流程控制
2023年6月17日大约 3 分钟
流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉"
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.")
}