for循环
类比C语言三种常用的循环,for循环也可以分为三类。
- 和C语言的for一样,以永真形式存在,存在格式:
for { }
也是for(;;)的形式
-
和C语言的while一样,存在格式:
for condition{}
类比while循环格式
-
和C语言的for一样,存在格式:
for init; condition; post { }
int:一般为赋值表达式,给控制变量赋初值 。
condition:关系表达式或逻辑表达式,循环控制条件。
post:一般为赋值表达式,给控制变量增量或减量。
例:计算1~10之和
package main
import "fmt"
func main() {
sum := 0
for i := 0; i <= 10; i++ {
sum += i
}
fmt.Println(sum)
}
输出结果为55。
和C语言中for类似,int和post可以进行省略,写成for ;condition; 的形式。for还有一种range格式,之后再细说。
循环嵌套的形成和C语言大差不差,不再细说了。
break语句
- 用于循环语句中跳出循环,并开始执行循环之后的语句。
- break 在 switch 语句中在执行一条 case 后跳出语句的作用。
- break 可应用在 select 语句中。
- 在多重循环中,可以用标号 label 标出想 break 的循环。
例:
package main
import "fmt"
func main() {
sum := 0
for {
sum += 1
fmt.Println(sum)
if sum == 20 {
break
}
}
fmt.Println(sum)
}
输出结果展示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
20
注意:break用来跳出循环的时候只能跳出当前所在层的循环体,不能跳出上一层的循环体。
关于标号label,其实只是用来让输出更加明了的,让你能够判断出哪里跳出了循环。
例:
package main
import "fmt"
func main() {
// 不使用标记
fmt.Println("---- break ----")
for i := 1; i <= 3; i++ {
fmt.Printf("i: %d\n", i)
for i2 := 11; i2 <= 13; i2++ {
fmt.Printf("i2: %d\n", i2)
break
}
}
// 使用标记
fmt.Println("---- break label ----")
re:
for i := 1; i <= 3; i++ {
fmt.Printf("i: %d\n", i)
for i2 := 11; i2 <= 13; i2++ {
fmt.Printf("i2: %d\n", i2)
break re
}
}
}
输出展示:
---- break ----
i: 1
i2: 11
i: 2
i2: 11
i: 3
i2: 11
---- break label ----
i: 1
i2: 11
continue语句
continue的作用是从这个位置开始,不再继续执行下面的指令,直接进入下一次循环,这次循环到此为止。依旧可以用标号label标出位置。
例:
package main
import "fmt"
func main() {
/* 定义局部变量 */
var a int = 10
/* for 循环 */
for a < 20 {
if a == 15 {
/* 跳过此次循环 */
a = a + 1
continue
}
fmt.Printf("a 的值为 : %d\n", a)
a++
}
}
结果展示:
a 的值为 : 10
a 的值为 : 11
a 的值为 : 12
a 的值为 : 13
a 的值为 : 14
a 的值为 : 16
a 的值为 : 17
a 的值为 : 18
a 的值为 : 19
goto语句
无条件地转移到过程中指定的行,通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。但是,在结构化程序设计中一般不主张使用 goto 语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难,这是和C语言一样的。
goto跳转需要标记,所以使用该语句要注意标记设置和位置。
例:在变量 a 等于 15 的时候跳过本次循环并回到循环的开始语句 LOOP 处
package main
import "fmt"
func main() {
/* 定义局部变量 */
var a int = 10
/* 循环 */
LOOP:
for a < 20 {
if a == 15 {
/* 跳过迭代 */
a = a + 1
goto LOOP
}
fmt.Printf("a的值为 : %d\n", a)
a++
}
}
结果展示:
a的值为 : 10
a的值为 : 11
a的值为 : 12
a的值为 : 13
a的值为 : 14
a的值为 : 16
a的值为 : 17
a的值为 : 18
a的值为 : 19