一、 for 循环
语法
Go 语言的 For 循环有 3 种形式
for init; condition; post { }
// for ; i <= 10; {}
for condition { }
//for(;条件;)
for { }
语法说明
- init: 一般为赋值表达式,给控制变量赋初值;
- 参数是可选
- condition: 关系表达式或逻辑表达式,循环控制条件;
- post: 一般为赋值表达式,给控制变量增量或减量。
- 参数是可选
for语句执行过程如下:
- 先对表达式 1 赋初值;
- 判别赋值表达式 init 是否满足给定条件
- 真:满足循环条件,则执行循环体内语句,然后执行 post
- 进入第二次循环,再判断 condition;
- condition为真,继续循环
- condition为假,就终止for循环,执行循环体外语句。
- 假: 退出
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
二、循环控制语句
- break
- 经常用于中断当前 for 循环或跳出 switch 语句
- continue
- 跳过当前循环的剩余语句,然后继续进行下一轮循环。
- goto
- 将控制转移到被标记的语句。
2.1、break
- 用于循环语句中跳出循环,并开始执行循环之后的语句。
- break 在 switch(开关语句)中在执行一条 case 后跳出语句的作用。
- 在多重循环中,可以用标号 label 标出想 break 的循环。
案例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
- continue 语句 有点像 break 语句。但是 continue 不是跳出循环,而是跳过当前循环执行下一次循环语句。
- for 循环中,执行 continue 语句会触发 for 增量语句的执行。
- 在多重循环中,可以用标号 label 标出想 continue 的循环。
举例
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
- Go 语言的 goto 语句可以无条件地转移到过程中指定的行。
- goto 语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。
- 在结构化程序设计中一般不主张使用 goto 语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。
语法
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");
}
}