这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战
循环语句表示条件满足,可以反复的执行某段代码。for是唯一的循环语句。(Go没有while循环)
for语句
语法结构:
for init; condition; post { }
初始化语句只执行一次。在初始化循环之后,将检查该条件。如果条件计算为true,那么{}中的循环体将被执行,然后是post语句。post语句将在循环的每次成功迭代之后执行。在执行post语句之后,该条件将被重新检查。如果它是正确的,循环将继续执行,否则循环终止。
- 在*初始化(initialization)*语句是可选的,用于循环开始之前执行。初始化语句始终位于简单的语句中,例如变量声明,递增或赋值语句或函数调用。
- 条件(condition)语句包含一个布尔表达式,该表达式在循环的每次迭代开始时计算。如果条件语句的值为true,则执行循环。
- post语句在for循环体之后执行。在post语句之后,条件语句再次计算条件语句的值是否为false,然后循环结束。
示例代码:
package main
import (
"fmt"
)
func main() {
for i := 1; i <= 10; i++ {
fmt.Printf("%d",i)
}
}
在for循环中声明的变量仅在循环范围内可用。因此,i不能在外部访问循环。
for循环变体
所有的三个组成部分,即初始化、条件和post都是可选的。
for condition { } //效果与while相似
for { } //效果与for(;;) 一样
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环
for key, value := range oldMap {
newMap[key] = value
}
package main
import "fmt"
func main() {
var b int = 15
var a int
numbers := [6]int{1, 2, 3, 5}
/* for 循环 */
for a := 0; a < 10; a++ {
fmt.Printf("a 的值为: %d\n", a)
}
for a < b {
a++
fmt.Printf("a 的值为: %d\n", a)
}
for i,x:= range numbers {
fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
}
}
- key和value是分配迭代值的变量。它们也称为迭代变量。
- 第二个变量,即value是可选的。
- 范围表达式在循环开始之前被评估一次。
运行结果:
a 的值为: 0
a 的值为: 1
a 的值为: 2
a 的值为: 3
a 的值为: 4
a 的值为: 5
a 的值为: 6
a 的值为: 7
a 的值为: 8
a 的值为: 9
a 的值为: 1
a 的值为: 2
a 的值为: 3
a 的值为: 4
a 的值为: 5
a 的值为: 6
a 的值为: 7
a 的值为: 8
a 的值为: 9
a 的值为: 10
a 的值为: 11
a 的值为: 12
a 的值为: 13
a 的值为: 14
a 的值为: 15
第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 5
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0
对字符串使用for循环: for循环可以遍历字符串的Unicode代码点。
语法:
for index, chr:= range str{
// 语句..
}
在这里,索引是存储UTF-8编码代码点的第一个字节的变量,而chr是存储给定字符串的字符的变量,而str是字符串。
示例
package main
import "fmt"
func main() {
// 字符串作为for循环中的范围
for i, j := range "XabCd" {
fmt.Printf("%U 的索引值为 %d\n", j, i)
}
}
输出:
U+0058 的索引值为 0
U+0061 的索引值为 1
U+0062 的索引值为 2
U+0043 的索引值为 3
U+0064 的索引值为 4
跳出循环
break语句
break:跳出循环体。break语句用于在结束其正常执行之前突然终止for循环
示例代码:
package main
import (
"fmt"
)
func main() {
for i := 1; i <= 10; i++ {
if i > 5 {
break //loop is terminated if i > 5
}
fmt.Printf("%d ", i)
}
fmt.Printf("\nline after for loop")
}
continue语句
continue:跳出一次循环。continue语句用于跳过for循环的当前迭代。在continue语句后面的for循环中的所有代码将不会在当前迭代中执行。循环将继续到下一个迭代。
示例代码:
package main
import (
"fmt"
)
func main() {
for i := 1; i <= 10; i++ {
if i%2 == 0 {
continue
}
fmt.Printf("%d ", i)
}
}
goto语句
goto:可以无条件地转移到过程中指定的行。
语法结构:
goto label;
..
..
label: statement;
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++
}
}