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中标签区别:

  1. break,continue中的标签只是可以用来结束某个循环,或者跳过某次循环,程序执行的顺序并没有改变
  2. goto中的标签可以使得程序直接跳到某个特定位置去执行
posted @ 2020-11-06 14:46  TR_Goldfish  阅读(758)  评论(0编辑  收藏  举报