Go 中的 for 循环可以使用 continue, break 进行控制,同时也可以标签

下面看一下使用标签的一个好处

示例:Go 求 N 以内的素数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main
 
import (
	"fmt"
)
 
func main() {
	printPrime(10)
}
 
func printPrime(maxNum int) {
next:
	for outer := 2; outer < maxNum; outer++ {
		for inner := 2; inner < outer; inner++ {
			if outer%inner == 0 {
				continue next
			}
		}
		fmt.Printf("%d\n", outer)
	}
	fmt.Println("Completed")
}

再看一下用C语言实现的(C 的 continue, break 不支持标签)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
 
void printPrime(int maxNum)
{
	int outer, inner;
	int flag;
 
	for (outer = 2; outer < maxNum; outer++)
	{
		flag = 1;
		for (inner = 2; inner < outer; inner++)
		{
			if (outer % inner == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)
		{
			printf("%d\n", outer);
		}
	}
	printf("Completed\n");
}
 
int main()
{
	printPrime(10);
	return 0;
}

可以看出,对于计算素数这个程序,使用循环使用跳转标签,可以省去如C语言 flag 这样的判断