一、 for 循环

语法

Go 语言的 For 循环有 3 种形式

for init; condition; post { }
 
// for ; i <= 10; {}
for condition { }

//for(;条件;) 
for { }

go语言 分组循环 go循环语句_迭代

语法说明
  1. init: 一般为赋值表达式,给控制变量赋初值;
  1. 参数是可选
  1. condition: 关系表达式或逻辑表达式,循环控制条件;
  2. post: 一般为赋值表达式,给控制变量增量或减量。
  1. 参数是可选
for语句执行过程如下:
  1. 先对表达式 1 赋初值;
  2. 判别赋值表达式 init 是否满足给定条件
  1. 真:满足循环条件,则执行循环体内语句,然后执行 post
  1. 进入第二次循环,再判断 condition;
  1. condition为真,继续循环
  2. condition为假,就终止for循环,执行循环体外语句。
  1. 假: 退出
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。
格式如下:
for key, value := range oldMap {
    newMap[key] = value
}
案例1
package main

import "fmt"

func main() {

	var i int = 0;
	for m := 1; m <= 10; m++ {
		fmt.Println("for方式1-->:", m)
	}

	fmt.Println("-------------------")
	//init 和 post 参数是可选的,我们可以直接省略它
	i  = 0;
	for ; i < 10; {
		i++;
		fmt.Println("for方式2-->:", i)
	}
	fmt.Println("-------------------")
	//init 和 post 参数是可选的,我们可以直接省略它
	i  = 0;
	for i < 10 {
		i++;
		fmt.Println("for方式3-->:", i)
	}

}

输出 
for方式1-->: 1
for方式1-->: 2
for方式1-->: 3
for方式1-->: 4
for方式1-->: 5
for方式1-->: 6
for方式1-->: 7
for方式1-->: 8
for方式1-->: 9
for方式1-->: 10
-------------------
for方式2-->: 1
for方式2-->: 2
for方式2-->: 3
for方式2-->: 4
for方式2-->: 5
for方式2-->: 6
for方式2-->: 7
for方式2-->: 8
for方式2-->: 9
for方式2-->: 10
-------------------
for方式3-->: 1
for方式3-->: 2
for方式3-->: 3
for方式3-->: 4
for方式3-->: 5
for方式3-->: 6
for方式3-->: 7
for方式3-->: 8
for方式3-->: 9
for方式3-->: 10
案例2–无限循环
func main() {
	var i int = 1;
	for {
		i++;
		fmt.Println("无限循环-->:", i)
	}

}
案例3–For-each range 循环
package main

import "fmt"

func main() {
	var arrStr = []string{"a", "b"}
	for i, s := range arrStr {
		fmt.Println("索引:", i, ",值为:", s)
	}

	fmt.Println("-----------------")
	var arrNumbers = [6]int{1, 2, 3, 4}
	for i, s := range arrNumbers {
		fmt.Println("索引:", i, ",值为:", s)
	}
}

输出

索引: 0 ,值为: a
索引: 1 ,值为: b
-----------------
索引: 0 ,值为: 1
索引: 1 ,值为: 2
索引: 2 ,值为: 3
索引: 3 ,值为: 4
索引: 4 ,值为: 0
索引: 5 ,值为: 0

二、循环控制语句

  1. break
  1. 经常用于中断当前 for 循环或跳出 switch 语句
  1. continue
  1. 跳过当前循环的剩余语句,然后继续进行下一轮循环。
  1. goto
  1. 将控制转移到被标记的语句。

2.1、break

  1. 用于循环语句中跳出循环,并开始执行循环之后的语句。
  2. break 在 switch(开关语句)中在执行一条 case 后跳出语句的作用。
  3. 在多重循环中,可以用标号 label 标出想 break 的循环。

go语言 分组循环 go循环语句_go语言 分组循环_02

案例1
package main

import "fmt"

func main() {
	/* 定义局部变量 */
	var a int = 10

	/* for 循环 */
	for a < 20 {
		fmt.Println("a:", a)
		a++;
		if a > 15 {
			/* 使用 break 语句跳出循环 */
			break;
		}
	}
	fmt.Println("代码111")

}
输出
a: 10
a: 11
a: 12
a: 13
a: 14
a: 15
代码111
案例2–使用标记和不使用标记的区别
package main

import "fmt"

func main() {

	fmt.Println("-----------------不使用标记----------------------")
	for i1 := 1; i1 <= 3; i1++ {
		fmt.Println("i1:", i1)
		for i2 := 11; i2 <= 13; i2++ {
			fmt.Println("i2:", i2)
			break
		}
	}

	fmt.Println("代码1111")

	fmt.Println("------------------使用标记---------------------")

re:
	for i1 := 1; i1 <= 3; i1++ {
		fmt.Println("i1:", i1)
		for i2 := 11; i2 <= 13; i2++ {
			fmt.Println("i2:", i2)
			break re
		}
	}

	fmt.Println("代码2222")
}

输出

-----------------不使用标记----------------------
i1: 1
i2: 11
i1: 2
i2: 11
i1: 3
i2: 11
代码1111
------------------使用标记---------------------
i1: 1
i2: 11
代码2222

2.2、continue

  1. continue 语句 有点像 break 语句。但是 continue 不是跳出循环,而是跳过当前循环执行下一次循环语句。
  2. for 循环中,执行 continue 语句会触发 for 增量语句的执行。
  3. 在多重循环中,可以用标号 label 标出想 continue 的循环。

go语言 分组循环 go循环语句_迭代_03

举例
package main

import "fmt"

func main() {
	var a int = 1

	fmt.Println("-----------------简单continue----------------------")
	/* for 循环 */
	for a < 5 {
		a++;
		if a == 3 {
			/* 使用 continue 语句跳出循环 */
			continue;
		}

		fmt.Println("a:", a)

	}
	fmt.Println("代码111")

	fmt.Println("-----------------不使用标记----------------------")
	for i1 := 1; i1 <= 3; i1++ {
		fmt.Println("i1:", i1)
		for i2 := 11; i2 <= 13; i2++ {
			if i2 == 11 {
				continue
			}
			fmt.Println("i2:", i2)

		}
		fmt.Println()
	}

	fmt.Println("代码1111")

	fmt.Println("------------------使用标记---------------------")

re:
	for i1 := 1; i1 <= 3; i1++ {
		fmt.Println("i1:", i1)
		for i2 := 11; i2 <= 13; i2++ {
			if i2 == 11 {
				continue re
			}
			fmt.Println("i2:", i2)

		}
		fmt.Println()
	}

	fmt.Println("代码2222")
}

输出

-----------------简单continue----------------------
a: 2
a: 4
a: 5
代码111
-----------------不使用标记----------------------
i1: 1
i2: 12
i2: 13

i1: 2
i2: 12
i2: 13

i1: 3
i2: 12
i2: 13

代码1111
------------------使用标记---------------------
i1: 1
i1: 2
i1: 3
代码2222

2.3、goto

  1. Go 语言的 goto 语句可以无条件地转移到过程中指定的行。
  2. goto 语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。
  3. 在结构化程序设计中一般不主张使用 goto 语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。
  4. go语言 分组循环 go循环语句_go语言 分组循环_04

语法
goto label;
..
.
label: statement;
举例
package main

import "fmt"

func main() {
	/* 定义局部变量 */
	var a int = 0;

	/* 循环 */
re:
	for a <= 5 {
		a++
		if a == 3 {

			fmt.Println("跳过迭代,a:", a)
			goto re
		}
		if a == 4 {
			fmt.Println("跳过迭代,a:", a)
			goto re2
		}

		fmt.Println("a:", a)
	}

	fmt.Println("代码111")
re2:
	fmt.Println("代码222")
	fmt.Println("代码333")
}

输出
a: 1
a: 2
跳过迭代,a: 3
跳过迭代,a: 4
代码222
代码333

三、无限循环

func main() {
    for true  {
        fmt.Printf("这是无限循环。\n");
    }
}