Skip to content

Commit e20f26b

Browse files
author
wanshaobo
committed
switch 语句
1 parent bf05d8f commit e20f26b

File tree

2 files changed

+399
-0
lines changed

2 files changed

+399
-0
lines changed
Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
1+
9 - 循环语句
2+
========================
3+
4+
上一节:[第八篇 if else 语句](/docs/golang_tutorial_08.md)
5+
下一节:[第十篇 包](/docs/golang_tutorial_10.md)
6+
7+
这是本Golang系列教程的第9篇。
8+
9+
循环语句用于重复执行一段代码。
10+
11+
for 语句是 Go 中唯一的循环语句。Go 没有提供其他语言(如 C)中的 while 和 do while 语句。
12+
13+
## for 语句语法
14+
15+
for 语句的语法如下:
16+
17+
```golang
18+
for initialisation; condition; post {
19+
}
20+
```
21+
22+
其中, `initialisation` 为初始化语句,该语句仅执行一次。`initialisation` 语句结束后,接着对 `condition` 求值,如果 `condition` 求值结果为 `true`,则执行大括号` {} `里面的循环体,然后执行 post 语句,如果 `condition` 求值结果为 false 则退出循环。`post` 语句会在每次循环体执行结束后执行。执行完 `post` 语句之后,`condition` 会被重新求值,如果是`true`,则继续执行循环体,否则退出循环。
23+
24+
## 例子
25+
26+
下面的程序使用 for 循环打印 1 到 10 之间的整数。
27+
28+
```golang
29+
package main
30+
31+
import (
32+
"fmt"
33+
)
34+
35+
func main() {
36+
for i := 1; i <= 10; i++ {
37+
fmt.Printf(" %d",i)
38+
}
39+
}
40+
```
41+
42+
在上面的程序中,`i` 被初始化为 `1`。条件语句判断` i `是否小于等于 `10`,如果是则打印 `i`,否则结束循环。`post` 语句在每次迭代结束时将 `i`递增 `1`。直到`i`的值大于 `10` 循环结束。
43+
44+
上面的程序打印:`1 2 3 4 5 6 7 8 9 10`
45+
46+
`for` 头部定义的变量仅在 `for` 语句范围内可见,因此 `i `不能在 `for` 循环体外被访问。
47+
48+
## break
49+
50+
`break` 语句用于终止 `for` 循环,继续执行 `for` 循环后面的语句。
51+
52+
下面的程序打印 1 到 5 之间的整数。请注意该程序中 `break` 的用法。
53+
54+
```golang
55+
package main
56+
57+
import (
58+
"fmt"
59+
)
60+
61+
func main() {
62+
for i := 1; i <= 10; i++ {
63+
if i > 5 {
64+
break //loop is terminated if i > 5
65+
}
66+
fmt.Printf("%d ", i)
67+
}
68+
fmt.Printf("\nline after for loop")
69+
}
70+
```
71+
72+
在上面的程序中,每次迭代都会检查`i`的值,如果`i`大于 5 则执行 `break` 语句跳出循环,并执行 for 循环后面的那条 fmt.Printf 语句。上面的程序输出如下:
73+
74+
```golang
75+
1 2 3 4 5
76+
line after for loop
77+
```
78+
79+
## continue
80+
81+
`continue` 语句用于跳过 `for` 循环的当前迭代。循环体中`continue`语句之后的所有语句将被跳过不予执行。循环将继续执行下一次迭代。
82+
83+
让我们写一个程序利用 `continue` 来打印 `1``10` 之间的奇数。
84+
85+
```golang
86+
package main
87+
88+
import (
89+
"fmt"
90+
)
91+
92+
func main() {
93+
for i := 1; i <= 10; i++ {
94+
if i%2 == 0 {
95+
continue
96+
}
97+
fmt.Printf("%d ", i)
98+
}
99+
}
100+
```
101+
102+
在上面的程序中,`if i%2 == 0`检测 `i` 除以 `2` 的余数是否为 `0`,如果为 `0``i` 是偶数,利用 `continue` 语句跳过当前迭代并继续下一次迭代。因此 `continue` 语句之后的 `fmt.Printf` 语句将不被执行,并且循环进入到下一次迭代。上面的程序输出为:`1 3 5 7 9`
103+
104+
## 更多例子
105+
106+
让我们再写一些代码来演示 for 循环的其它变体。
107+
108+
下面的程序 打印 0 到 10 之间的所有偶数。
109+
110+
```golang
111+
package main
112+
113+
import (
114+
"fmt"
115+
)
116+
117+
func main() {
118+
i := 0
119+
for ;i <= 10; { // initialisation and post are omitted
120+
fmt.Printf("%d ", i)
121+
i += 2
122+
}
123+
}
124+
```
125+
126+
我们已经知道 `for` 循环头部的三个部分`initialisation``condition``post` 都是可选的。上面的程序中,忽略了 `initialisation``post` 部分。`i``for` 循环之外初始化为 `0`,只要`i <= 10` 循环就一直执行,`i` 在循环体内每次递增 `2`。上面的程序输出为:`0 2 4 6 8 10`
127+
128+
上面程序中的分号(`;`)也可以省略。这种形式的 `for` 循环可以视为 `while` 循环的替代品。上面的程序可以被重写如下:
129+
130+
```golang
131+
package main
132+
133+
import (
134+
"fmt"
135+
)
136+
137+
func main() {
138+
i := 0
139+
for i <= 10 { //semicolons are ommitted and only condition is present
140+
fmt.Printf("%d ", i)
141+
i += 2
142+
}
143+
}
144+
```
145+
146+
可以在 `for` 循环中声明和操作多个变量,比如下面的程序:
147+
148+
```golang
149+
package main
150+
151+
import (
152+
"fmt"
153+
)
154+
155+
func main() {
156+
for no, i := 10, 1; i <= 10 && no <= 19; i, no = i+1, no+1 { //multiple initialisation and increment
157+
fmt.Printf("%d * %d = %d\n", no, i, no*i)
158+
}
159+
160+
}
161+
```
162+
163+
上面的程序中,`no`` i `被声明并初始化为 `10``1`。它们在每次迭代结束时递增 `1`。在 `condition` 部分使用 `&&` 操作符来确保 `i` 小于或等于 `10` 并且 `no` 小于或等于 `19`。程序的输出如下:
164+
165+
```golang
166+
10 * 1 = 10
167+
11 * 2 = 22
168+
12 * 3 = 36
169+
13 * 4 = 52
170+
14 * 5 = 70
171+
15 * 6 = 90
172+
16 * 7 = 112
173+
17 * 8 = 136
174+
18 * 9 = 162
175+
19 * 10 = 190
176+
```
177+
178+
## 无限循环
179+
180+
可以用下面的语法实现无限循环:
181+
182+
```golang
183+
for {
184+
}
185+
```
186+
187+
下面的程序将一直打印` Hello World `永不终止。
188+
189+
```golang
190+
package main
191+
192+
import "fmt"
193+
194+
func main() {
195+
for {
196+
fmt.Println("Hello World")
197+
}
198+
}
199+
```
200+
201+
如果你在 [go playground ](https://play.golang.org/p/kYQZw1AWT4)执行上面的程序,你将得到一个错误:`process took too long`。请尝试在本地系统中运行它以无限打印`"Hello World"`
202+
203+
还有一个` range for `可用于遍历数组,我们将在介绍数组时介绍它。
204+
205+
希望你喜欢阅读。请留下宝贵的意见和反馈:)

0 commit comments

Comments
 (0)