1.golang流程控制关键字break
break
语句可以结束for
、switch
和select
的代码块
break结束当前整个循环
break注意事项
1.单独在
select
中使用break
和不使用break
没有啥区别2.单独在表达式
switch
语句,并且没有fallthough
,使用break
和不使用break
没有啥区别3.单独在表达式
swithch
语句,并且有fallthough
,使用break
能够终止fallthough
后面的case
语句的执行4.带标签的
break
,可以跳出多层select/switch
作用域。使用break
更加灵活,写法更加简单灵活,不需要使用控制变量一层一层跳出循环,没有带break
的只能跳出当前语句块
go
func breakFunc() {
//跳出for循环
for i := 1; i <= 10; i++ {
if i == 5 {
break //退出循环
}
fmt.Printf("i=%v\n", i)
}
}
func breakFunc() {
//跳出for循环
for i := 1; i <= 10; i++ {
if i == 5 {
break //退出循环
}
fmt.Printf("i=%v\n", i)
}
}
go
func switchBreakFunc() {
i := 2
switch i {
case 1:
fmt.Printf("1")
break
case 2:
fmt.Printf("2")
break //使fallthrough失效
fallthrough
case 3:
fmt.Printf("3")
break
}
}
func switchBreakFunc() {
i := 2
switch i {
case 1:
fmt.Printf("1")
break
case 2:
fmt.Printf("2")
break //使fallthrough失效
fallthrough
case 3:
fmt.Printf("3")
break
}
}
go
func LableFunc() {
MYLABEL:
for i := 0; i < 10; i++ {
fmt.Printf("i:%v\n", i)
if i == 5 {
break MYLABEL
}
}
fmt.Printf("end....")
}
func LableFunc() {
MYLABEL:
for i := 0; i < 10; i++ {
fmt.Printf("i:%v\n", i)
if i == 5 {
break MYLABEL
}
}
fmt.Printf("end....")
}
2.golang关键字contiune
continue
只能在循环中,在go中只能在for
循环中,它可以终止本次循环,进行下一次循环
在continue
语句后添加标签时,表示开始标签对应的循环
continue结束当次循环
go
func forContinue() {
for i := 1; i < 10; i++ {
if i%2 == 0 {
fmt.Printf("i:%v\n", i)
} else {
continue
}
}
}
func forContinue() {
for i := 1; i < 10; i++ {
if i%2 == 0 {
fmt.Printf("i:%v\n", i)
} else {
continue
}
}
}
go
func continueMylabelFunc() {
for i := 0; i < 10; i++ {
MYLABEL:
for j := 0; j < 10; j++ {
if i == 2 && j == 2 {
continue MYLABEL
}
fmt.Printf("%v,%v\n", i, j)
}
}
}
func continueMylabelFunc() {
for i := 0; i < 10; i++ {
MYLABEL:
for j := 0; j < 10; j++ {
if i == 2 && j == 2 {
continue MYLABEL
}
fmt.Printf("%v,%v\n", i, j)
}
}
}
continue执行到就会跳过本次执行,继续循环
break执行到后就会跳出循环
3.关键字goto
goto
语句通过标签进行代码的无条件跳转。goto
语句可以在快速跳出循环、避免重复退出上有一定的帮助。
Go语言中使用goto
语句能简化一些代码的实现过程。例如双层嵌套的for循环要退出时:
go
func gotoFunc() {
i := 1
if i > 2 {
fmt.Printf("2")
} else {
goto END
}
END:
fmt.Printf("end...")
}
func gotoFunc() {
i := 1
if i > 2 {
fmt.Printf("2")
} else {
goto END
}
END:
fmt.Printf("end...")
}
go
func forGotoFunc() {
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if i >= 2 && j <= 2 {
goto END
}
}
}
END:
fmt.Printf("end...")
}
func forGotoFunc() {
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if i >= 2 && j <= 2 {
goto END
}
}
}
END:
fmt.Printf("end...")
}