Go 语言 break 语句
在 Go 语言中,break 语句用于终止当前循环或者 switch 语句的执行,并跳出该循环或者 switch 语句的代码块。
break 语句可以用于以下几个方面:。
- 用于循环语句中跳出循环,并开始执行循环之后的语句。
- break 在 switch 语句中在执行一条 case 后跳出语句的作用。
- break 可应用在 select 语句中。
- 在多重循环中,可以用标号 label 标出想 break 的循环。
语法
break 语法格式如下:
break
break 语句流程图如下:
实例
在 for 循环中使用 break:
实例
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i == 5 {
break // 当 i 等于 5 时跳出循环
}
fmt.Println(i)
}
}
输出结果:
0
1
2
3
4
在变量 a 大于 15 的时候跳出循环:
实例
package main
import "fmt"
func main() {
/* 定义局部变量 */
var a int = 10
/* for 循环 */
for a < 20 {
fmt.Printf("a 的值为 : %d\n", a);
a++
if a > 15 {
/* a 大于 15 时使用 break 语句跳出循环 */
break
}
}
}
以上实例中当 a 的值大于 15 时,break 语句被执行,整个循环被终止。执行结果为:
a 的值为 : 10
a 的值为 : 11
a 的值为 : 12
a 的值为 : 13
a 的值为 : 14
a 的值为 : 15
以下实例有多重循环,演示了使用标记和不使用标记的区别:
实例
package main
import "fmt"
func main() {
// 不使用标记
fmt.Println("---- break ----")
for i := 1; i <= 3; i++ {
fmt.Printf("i: %d\n", i)
for i2 := 11; i2 <= 13; i2++ {
fmt.Printf("i2: %d\n", i2)
break
}
}
// 使用标记
fmt.Println("---- break label ----")
re:
for i := 1; i <= 3; i++ {
fmt.Printf("i: %d\n", i)
for i2 := 11; i2 <= 13; i2++ {
fmt.Printf("i2: %d\n", i2)
break re
}
}
}
以上实例执行结果为:
---- break ----
i: 1
i2: 11
i: 2
i2: 11
i: 3
i2: 11
---- break label ----
i: 1
i2: 11
在 switch 语句中使用 break:
实例
import "fmt"
func main() {
day := "Tuesday"
switch day {
case "Monday":
fmt.Println("It's Monday.")
case "Tuesday":
fmt.Println("It's Tuesday.")
break // 跳出 switch 语句
case "Wednesday":
fmt.Println("It's Wednesday.")
}
}
输出结果:
It's Tuesday.
在 select 语句中使用 break:
实例
package main
import (
"fmt"
"time"
)
func main() {
ch1 := make(chan int)
ch2 := make(chan int)
go func() {
time.Sleep(2 * time.Second)
ch1 <- 1
}()
go func() {
time.Sleep(1 * time.Second)
ch2 <- 2
}()
select {
case <-ch1:
fmt.Println("Received from ch1.")
case <-ch2:
fmt.Println("Received from ch2.")
break // 跳出 select 语句
}
}
输出结果:
Received from ch2.
在 Go 语言中,break 语句在 select 语句中的应用是相对特殊的。由于 select 语句的特性,break 语句并不能直接用于跳出 select 语句本身,因为 select 语句是非阻塞的,它会一直等待所有的通信操作都准备就绪。如果需要提前结束 select 语句的执行,可以使用 return 或者 goto 语句来达到相同的效果。
以下实例,展示了在 select 语句中使用 return 来提前结束执行的情况:
实例
package main
import (
"fmt"
"time"
)
func process(ch chan int) {
for {
select {
case val := <-ch:
fmt.Println("Received value:", val)
// 执行一些逻辑
if val == 5 {
return // 提前结束 select 语句的执行
}
default:
fmt.Println("No value received yet.")
time.Sleep(500 * time.Millisecond)
}
}
}
func main() {
ch := make(chan int)
go process(ch)
time.Sleep(2 * time.Second)
ch <- 1
time.Sleep(1 * time.Second)
ch <- 3
time.Sleep(1 * time.Second)
ch <- 5
time.Sleep(1 * time.Second)
ch <- 7
time.Sleep(2 * time.Second)
}
以上实例中,process 函数在一个无限循环中使用 select 语句等待通道 ch 上的数据。当接收到数据时,会执行一些逻辑。当接收到的值等于 5 时,使用 return 提前结束 select 语句的执行。
输出结果:
No value received yet.
No value received yet.
Received value: 1
No value received yet.
Received value: 3
No value received yet.
Received value: 5
通过使用 return,我们可以在 select 语句中提前终止执行,并返回到调用者的代码中。
需要注意的是,使用 return 语句会立即终止当前的函数执行,所以请根据实际需求来决定在 select 语句中使用何种方式来提前结束执行。