[译]GO BOOTCAMP 第五章:控制流程
  热度 °
Go
语言中主要有三种控制流程if
,for
循环,switch case
语句。
if 声明
Go
中的if
声明,除了不需要()
和必需{}
之外,其它跟C
或Java
类似的。 像for
语句一样,if
语句可以在条件执行语句前有一个简短的声明,在if
声明中声明的参数,其作用仅限于if
语句体。在if
语句体中声明的变量,有效作用域也仅限于本语句体.
if
声明示例1
2
3if answer != 42 {
return "Wrong answer"
}
if
简短初始化声明示例1
2
3if err := foo(); err != nil {
panic(err)
}
for循环
Go
语言中只有一个循环结构,for
循环. 基本的for
循环体与C
或Java
语言类似,只是不需要()
,必需{}
. 并且和在C
和Java
中一个,可以给前置条件和后置声明留空.1
2
3
4sum := 0
for i := 0; i < 10; i++ {
sum += i
}
前置条件和后置声明赋空示例1
2
3
4sum := 1
for ; sum < 1000; {
sum += sum
}
for
完成while
功能1
2
3
4sum := 1
for sum < 1000 {
sum += sum
}
无限循环示例1
2
3for {
// do something in a loop forever
}
Switch case 声明
多数开发语言都有Switch case
控制流程,用于避免复杂的if else
语句1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17package main
import (
"fmt"
"time"
)
func main() {
now := time.Now().Unix()
mins := now % 2
switch mins {
case 0:
fmt.Println("even")
case 1:
fmt.Println("odd")
}
}
但是Go
语言中的Switch case
还是有如下差别的
- 只能对同类型数据进行比对
- 如果所有
case
都没有命中的化,可以设置一个default
语句执行默认的操作. - 可以在
case
声明中使用表达式,例如可以在声明中计算某个值
1 | package main |
也可以在一个case
声明中放多个条件值1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21package main
import "fmt"
func main() {
score := 7
switch score {
case 0, 1, 3:
fmt.Println("Terrible")
case 4, 5:
fmt.Println("Mediocre")
case 6, 7:
fmt.Println("Not bad")
case 8, 9:
fmt.Println("Almost perfect")
case 10:
fmt.Println("hmm did you cheat?")
default:
fmt.Println(score, " off the chart")
}
}
还可以通过关键字fallthrough
来使得同一个条件执行多个的case
1 | package main |
the result:1
2
3
4
5
6is <= 4
is <= 5
is <= 6
is <= 7
is <= 8
Try again!
也可以使用break
关键字退出switch case
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33package main
import (
"fmt"
"time"
)
func main() {
n := 1
switch n {
case 0:
fmt.Println("is zero")
fallthrough
case 1:
fmt.Println("<= 1")
fallthrough
case 2:
fmt.Println("<= 2")
fallthrough
case 3:
fmt.Println("<= 3")
if time.Now().Unix()%2 == 0 {
fmt.Println("un pasito pa lante maria")
break
}
fallthrough
case 4:
fmt.Println("<= 4")
fallthrough
case 5:
fmt.Println("<= 5")
}
}
the result:1
2
3
4<= 1
<= 2
<= 3
un pasito pa lante maria
练习题
将50个硬币分给10个用户: Matthew, Sarah, Augustus, Heidi, Emilie, Peter, Giana, Adriano, Aaron, Elizabeth; 硬币根据名字中包含的元音来分配,分配规则:
a: 1 coin e: 1 coin i: 2 coins o: 3 coins u: 4 coins
并且每个用户最多不能超过10个硬币, 打印这个map, 用户的名字为key
, 分得的硬币为value
. 分完所以硬币之后, 应该还有两个硬币剩余.
预期输出结果:1
2map[Matthew:2 Peter:2 Giana:4 Adriano:7 Elizabeth:5 Sarah:2 Augustus:10 Heidi:5 Emilie:6 Aaron:5]
Coins left: 2
注意Go
中的map
是无序的,但是最终的输出结果应该跟上面是一样的.
开始代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17package main
import "fmt"
var (
coins = 50
users = []string{
"Matthew", "Sarah", "Augustus", "Heidi", "Emilie",
"Peter", "Giana", "Adriano", "Aaron", "Elizabeth",
}
distribution = make(map[string]int, len(users))
)
func main() {
fmt.Println(distribution)
fmt.Println("Coins left:", coins)
}
练习题解答
1 | package main |
作者署名:朴实的一线攻城狮
本文标题:[译]GO BOOTCAMP 第五章:控制流程
本文出处:http://researchlab.github.io/2016/01/21/go-control/
版权声明:本文由Lee Hong创作和发表,采用署名(BY)-非商业性使用(NC)-相同方式共享(SA)国际许可协议进行许可,转载请注明作者及出处, 否则保留追究法律责任的权利。