Go 中的循环语句

在 Go 语言中,只有一种循环语句 - For 语句,但该语句被赋予了强大的功能。

For 的基本语法

首先,我们来看看 for 语句的基本语法:

1
2
3
for initialisation; condition; post {
// ... 需要循环执行的语句
}

初看起来和 C (java) 中的 for 语句基本一致,除了少了 for 后面的括号。 因此,一个基本的写法如下:

1
2
3
for i := 1; i < 10; i++ {
fmt.Printf("No.%d", i)
}

注意,初始化的部分使用的是 “:=” 符号

变身为 While, Do..While

因为 for 语句中的 initialisation 和 post 这两个不是是可以省略的,因此可以用 for 来实现其它语言中需要 While 或 Do..While 的情况,如:

1
2
3
4
n := 5
for n < 5 {
n *= 2
}

更复杂一定的例中是求两个数的最大公约数的代码段:

1
2
3
4
5
6
x = 102
y = 58
for y != 0 {
x, y = y, x % y
}
fmt.Printf("gcd is: %d", x)

无限循环(死循环)

如果把 for 语句中的 condition 部分也去掉了,那就构成了无限循环,如:

1
2
3
for {
fmt.Printf("Stop it.")
}

和其它语言一样,要停止无限循环,可以使用 break 语句。

循环一个数组(列表)

在一些语言中,为了简化对列表的迭代操作,发展出了 foreach 语句,在 Go 中,可以直接使用 for 来迭代数组(列表), 看下面的代码:

1
2
3
4
names := []string{"tom", "jack", "tim"}
for i, s := range names {
fmt.Printf("No.%d is %v\n", i, s)
}

在上面的代码中,每次迭代的数据及索引被赋值给 s 和 i 这两个变量。如果在循环中不需要处理索引,也可以将代码写为:

1
2
3
4
names := []string{"tom", "jack", "tim"}
for _, s := range names {
fmt.Printf("No.%d is %v\n", i, s)
}

迭代一个字典(map)

在 Go 语言中, for 语句也可以用来简化对字典(map)类型的迭代操作, 看下面的代码:

1
2
3
4
5
6
7
8
ages := map[string]int {
"tom": 20,
"jack": 21,
"tim": 22
}
for name, age := range ages {
fmt.Printf("%s\t%d\n", name, age)
}

本文标题:Go 中的循环语句

文章作者:Morning Star

发布时间:2020年04月02日 - 16:04

最后更新:2021年04月16日 - 15:04

原始链接:https://www.mls-tech.info/golang/go-loop-statement/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。