go语言中的break、break label、continue 、continue label、goto

for中的break

for中的break,和js中的break一样,会跳出当前循环,继续执行下一行代码。

复制代码
package main
import ("fmt")

func main()  {
	for i := 0; i < 5; i++ {
		if i==2 {
			break
		}
		fmt.Println(i)
	}
} 

只会输出0和1

当i==2时,会跳出当前for循环,后面的for循环就不会被执行了

双重for循环

外层循环一次,里层全部循环完

复制代码
package main
import ("fmt")

func main()  {
	for i := 0; i < 2; i++ {
		for k := 0; k < 5; k++ {
			fmt.Println(i,k)
		}
	}
} 

0 0

0 1

0 2

0 3

0 4

1 0

1 1

1 2

1 3

1 4

break中双重循环中的作用

复制代码
package main
import ("fmt")

func main()  {
	for i := 0; i < 2; i++ {
		for k := 0; k < 5; k++ {
			if(k == 3){
				break
			}
			fmt.Println(i,k)
		}
	}
} 

想想一下输出的结果;

当k=3的时候,跳出里面的循环,继续执行外层循环

输出

0 0

0 1

0 2

1 0

1 1

1 2

break label 标记跳出多重循环

复制代码
package main
import ("fmt")

func main()  {
label: // 这里可以是 xxx : 的格式
	for i := 0; i < 2; i++ {
		for k := 0; k < 5; k++ {
			if(k == 3){
				break label // 与上面的 label : 名称一样,跳出多重循环
			}
			fmt.Println(i,k)
		}
	}
} 

输出:

0 0

0 1

0 2

continue 跳过本次循环,继续下一次循环

复制代码
package main
import ("fmt")

func main()  {
	for i := 0; i < 3; i++ {
		if i == 1 {
			continue
		}
		fmt.Println(i)
	}
} 

输出:

0

2

continue label 跳过指定标记的循环

复制代码
package main
import ("fmt")

func main()  {
	label2:
	for i := 0; i < 2; i++ {
		for k := 0; k < 5; k++ {
			if k == 3{
        // 当k==3的时候,跳过当前循环,然后重新开始从i=1开始循环
				continue label2 
			}
			fmt.Println(i,k)
		}
	}
} 

0 0

0 1

0 2

1 0

1 1

1 2

goto 语句通过标签进行代码间的无条件跳转

复制代码
package main
import ("fmt")

func main()  {
	age := 18
	if age >= 18 {
		fmt.Println("成年人啦")
		goto label3
	} 

	fmt.Println("a")
	label3:
	//等会会跳转到这里
	fmt.Println("b")
} 

输出:

成年人啦

bbbb