Go语言循环语句
资料参考至菜鸟教程。
在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。
以下为大多编程语言循环程序的流程图:
Go语言提供了以下几种类型循环处理语句:
循环类型 | 描述 |
---|---|
for循环 | 重复执行语句块 |
循环嵌套 | 在for循环中嵌套一个或多个for循环 |
for循环
for循环是一个循环控制结构,可以执行指定次数的循环。
语法
Go语言的for循环有3种形式,只有其中一种使用分号。
和C语言的for一样:
for init;condition;post {}
和C的while一样:
for condition {}
和C的for(;;)一样:
for {}
- init:一般为赋值表达式,给控制变量赋初值;
- condition:关系表达式或逻辑表达式,循环控制条件;
- post:一般为赋值表达式,给控制变量增量或减量。
for语句执行过程如下:
- 先对表达式1赋初值;
- 判断赋值表达式init是否满足给定条件,若其值为真,满足循环条件,则执行循环体内的语句,然后执行post,进入第二次循环,再判别condition;否则判断condition的值为假,不满足条件,就终止for循环,执行循环体外的语句。
fro循环的range格式可以对slice、map、数组、字符串等进行迭代循环。格式如下:
for key, value := range oldMap{
newMap[key] = value
}
以上代码中的key和value是可以省略的。
如果只想读取key,格式如下:
for key := range oldMap
或者这样:
for key,_ := range oldMap
如果只想读取value,格式如下:
for _, value := range oldMap
for语句语法流程如下图所示:
实例
计算1到10的数字之和:
package main
import "fmt"
func main() {
sum := 0
for i := 0; i <= 10; i++ {
sum += i
}
fmt.Println(sum)
}
输出结果:
55
init和post参数是可选的,我们可以直接省略它,类似while语句。
以下示例在sum小于10的时候计算sum自相加后的值:
package main
import "fmt"
func main() {
sum := 1
for ; sum <= 10; {
sum += sum
}
fmt.Println(sum)
// 这样写也可以,更像 While 语句形式
sum = 1
for sum <= 10{
sum += sum
}
fmt.Println(sum)
}
输出结果:
16
16
无限循环:
package main
import "fmt"
func main() {
sum := 0
for {
sum++ // 无限循环下去
}
fmt.Println(sum) // 无法输出
}
For-each range 循环
这种格式的循环可以对字符串、数组、切片等进行迭代输出元素。
package main
import "fmt"
func main() {
strings := []string{"google", "golang"}
for i, s := range strings {
fmt.Println(i, s)
}
numbers := [6]int{1, 2, 3, 5}
for i,x:= range numbers {
fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
}
}
输出结果:
0 google
1 golang
第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 5
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0
for循环的range格式可以省略key和value,如下实例:
package main
import "fmt"
func main() {
map1 := make(map[int]float32)
map1[1] = 1.0
map1[2] = 2.0
map1[3] = 3.0
map1[4] = 4.0
// 读取 key 和 value
for key, value := range map1 {
fmt.Printf("key is: %d - value is: %f\n", key, value)
}
// 读取 key
for key := range map1 {
fmt.Printf("key is: %d\n", key)
}
// 读取 value
for _, value := range map1 {
fmt.Printf("value is: %f\n", value)
}
}
输出结果:
key is: 4 - value is: 4.000000
key is: 1 - value is: 1.000000
key is: 2 - value is: 2.000000
key is: 3 - value is: 3.000000
key is: 1
key is: 2
key is: 3
key is: 4
value is: 1.000000
value is: 2.000000
value is: 3.000000
value is: 4.000000
循环控制语句
循环控制语句可以控制循环体内语句的执行过程。
Go语言支持一下几种循环控制语句:
控制语句 | 描述 |
---|---|
break语句 | 经常用于中断当前for循环或跳出switch语句 |
continue语句 | 跳过当前循环的剩余语句,然后继续进行下一轮循环。 |
goto语句 | 将控制转移到被标记的语句。 |
无限循环
如果循环中条件语句永远不为false则会进行无限循环,我们可以通过for循环语句中中设置一个条件表达式来执行无限循环:
package main
import "fmt"
func main() {
for true {
fmt.Printf("无限循环.\n")
}
}