Golang中的循环控制语句break,continue,goto总结
Golang中的循环控制语句break,continue,goto总结
一:break(跳出直接包含break的那层for循环)
// 此break跳出的是循环loop1
func main() {
// loop1
for i:=0;i<10;i++{
if i>3{
break
}
fmt.Println(i)
}
// loop1
}
注意:我们还可以使用标签来退出指定循环
如下:
// 使用标签EX直接跳出loop1 func main() { EX: //loop1 for i:=0;i<10;i++{ //loop2 for j:=0;j<10;j++ { if j == 5 { break EX } fmt.Printf("%v-%v\n",i, j) } // loop2 } //loop1 }
二:continue(不跳出整个循环,只跳过此次循环)
// continue 是继续下一次的循环,与 break 的区别就是不跳出整个循环,只跳过此次循环
// 遇到continue跳过loop1此次循环,继续loop1的下一次循环
func main() {
// loop1
for i:=0;i<10;i++{
if i==5{
continue
}
fmt.Println(i)
}
// loop1
}
// 跳过了5,继续后面的循环
// 0 1 2 3 4 6 7 8 9
注意:continue 也支持标签写法
// 结合标签直接继续外层循环loop1的下一次循环(某种意义上可以说跳出了本次loop2循环) func main() { EX: // loop1 for i:=0;i<10;i++{ // loop2 for j:=0;j<10;j++ { if j == 5 { continue EX } fmt.Printf("%v-%v\n",i, j) } // loop2 } // loop1 }
三:goto(跳转到指定标签)
goto是个好东西,它可以跳转到我们指定的标签(不仅仅是跳出某个循环或者跳过某个循环,而是直接跳到代码中的某个位置)
// 使用goto的标签TAG直接跳到循环外面去了
package main
import "fmt"
func main() {
for i:=0;i<10;i++{
for j:=0;j<10;j++ {
if j == 5 {
goto Tag
}
fmt.Printf("%v-%v\n",i, j)
}
}
Tag:
fmt.Println("直接跳到循环外面")
}
执行结果:
GOROOT=D:\Go #gosetup
GOPATH=C:\GoProject #gosetup
D:\Go\bin\go.exe build -o C:\Users\think\AppData\Local\Temp\___go_build_test3_go.exe C:/GoProject/src/test3.go #gosetup
C:\Users\think\AppData\Local\Temp\___go_build_test3_go.exe #gosetup
0-0
0-1
0-2
0-3
0-4
直接跳到循环外面
Process finished with exit code 0
注意:
但是一般不主张使用goto语句,可能是因为太灵活反而容易造成程序混乱,不易维护
四:break,continue,goto中标签区别:
- break,continue中的标签只是可以用来结束某个循环,或者跳过某次循环,程序执行的顺序并没有改变
- goto中的标签可以使得程序直接跳到某个特定位置去执行