Follow Controller
Go 语言的流程控制主要通过以下几种语句来实现:if、else、for、switch、select 等。这些语句帮助你根据条件、循环和选择不同的代码路径。
1. if 语句
if 语句用于根据条件执行不同的代码块。
基本语法
go
if condition {
// 条件为 true 时执行的代码
}示例
go
package main
import "fmt"
func main() {
x := 10
if x > 5 {
fmt.Println("x 大于 5")
}
}if-else 语句
你可以使用 else 来处理条件为 false 时的代码。
go
if condition {
// 条件为 true 时执行
} else {
// 条件为 false 时执行
}示例
go
package main
import "fmt"
func main() {
x := 10
if x > 5 {
fmt.Println("x 大于 5")
} else {
fmt.Println("x 小于或等于 5")
}
}if-else if-else 语句
你可以使用多个 else if 来检查多个条件。
go
if condition1 {
// 条件 1 为 true 时执行
} else if condition2 {
// 条件 2 为 true 时执行
} else {
// 所有条件都不为 true 时执行
}示例
go
package main
import "fmt"
func main() {
x := 10
if x > 10 {
fmt.Println("x 大于 10")
} else if x == 10 {
fmt.Println("x 等于 10")
} else {
fmt.Println("x 小于 10")
}
}2. for 循环
Go 中只有一种循环形式:for 循环。你可以用它来实现不同类型的循环。
基本语法
go
for init; condition; post {
// 循环体
}示例
go
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
fmt.Println(i)
}
}无条件循环
你也可以省略条件和 post 部分,实现一个无限循环。
go
for {
// 无限循环
}示例
go
package main
import "fmt"
func main() {
i := 0
for {
fmt.Println(i)
i++
if i >= 5 {
break
}
}
}range 循环
range 用来迭代数组、切片、映射等数据结构。
go
for index, value := range collection {
// index 是索引,value 是对应的值
}示例
go
package main
import "fmt"
func main() {
arr := []int{1, 2, 3, 4, 5}
for index, value := range arr {
fmt.Printf("索引: %d, 值: %d\n", index, value)
}
}3. switch 语句
switch 语句用于根据表达式的值选择执行不同的分支。它是多个 if-else 语句的替代方案。
基本语法
go
switch expression {
case value1:
// 如果 expression 等于 value1 执行的代码
case value2:
// 如果 expression 等于 value2 执行的代码
default:
// 如果没有匹配的 case,执行 default 语句(可选)
}示例
go
package main
import "fmt"
func main() {
day := 2
switch day {
case 1:
fmt.Println("星期一")
case 2:
fmt.Println("星期二")
case 3:
fmt.Println("星期三")
default:
fmt.Println("其他天")
}
}不需要表达式
如果你只关心条件而不关心表达式的值,可以省略表达式,直接在各个 case 中使用条件。
go
switch {
case x > 0:
fmt.Println("x 大于 0")
case x < 0:
fmt.Println("x 小于 0")
default:
fmt.Println("x 等于 0")
}示例
go
package main
import "fmt"
func main() {
x := -10
switch {
case x > 0:
fmt.Println("x 大于 0")
case x < 0:
fmt.Println("x 小于 0")
default:
fmt.Println("x 等于 0")
}
}4. select 语句
select 用于多个 goroutine 之间的同步。它类似于 switch,但针对通道(channel)。
基本语法
go
select {
case <-ch1:
// 如果 ch1 有值就执行这里的代码
case <-ch2:
// 如果 ch2 有值就执行这里的代码
default:
// 如果没有任何通道准备好就执行这里的代码(可选)
}示例
go
package main
import "fmt"
func main() {
ch1 := make(chan string)
ch2 := make(chan string)
go func() {
ch1 <- "消息 1"
}()
go func() {
ch2 <- "消息 2"
}()
select {
case msg1 := <-ch1:
fmt.Println("收到消息:", msg1)
case msg2 := <-ch2:
fmt.Println("收到消息:", msg2)
}
}5. defer 语句
defer 用于延迟执行一个函数直到外层函数返回时。常用于资源清理或关闭操作。
示例
go
package main
import "fmt"
func main() {
defer fmt.Println("这是最后执行的语句")
fmt.Println("这是先执行的语句")
}输出:
这是先执行的语句
这是最后执行的语句总结
if:条件判断。for:循环控制。switch:多分支选择控制。select:用于 goroutine 的同步,通常与 channel 一起使用。defer:延迟执行,通常用于清理资源。
这些是 Go 语言中的常见流程控制语句,帮助你根据不同的条件、数据结构和程序状态来控制程序的执行流程。