流程控制
分支控制
if
if 条件 {
// do something
} else if 条件 {
// do something
} else {
// do something
}
这里的条件不需要使用括号括起来。
switch
switch 变量 {
case 值1:
// do something
case 值2:
// do something
default:
// do something
}
注意,与其他语言不同,Go 中的 switch
语句不需要 break
,一旦条件符合自动终止。
但是如果需要继续执行下一个条件,可以使用 fallthrough
关键字。
switch 变量 {
case 值1:
// do something
fallthrough
case 值2:
// do something
default:
// do something
}
对于相同结论的条件,可以使用逗号分隔。
switch 变量 {
case 值1, 值2:
// do something
default:
// do something
}
case
中使用布尔表达式是常用的技巧。
switch {
case a > 0:
// do something
case a < 0:
// do something
default:
// do something
}
避免嵌套 if
可以使用下面的技巧来避免嵌套 if
。
-
尽快返回:让条件不满足的分支直接 return。
-
提取函数:将条件判断提取到函数中。
循环控制
for
Go 中只提供了 for
循环,没有 while
循环。
但是提供了三种 for
循环的写法。
无限循环
for {
// do something
}
例如:
for {
fmt.Println("Hello, World!")
}
如果想要终止循环,可以使用 break
关键字。
for {
fmt.Println("Hello, World!")
break
}
条件循环
for 条件 {
// do something
}
例如:
var i int = 0
for i < 10 {
fmt.Println(i)
i++
}
计数循环
for 初始语句; 条件; 结束语句 {
// do something
}
例如:
for i := 0; i < 10; i++ {
fmt.Println(i)
}
循环中的控制语句
break
:终止循环。
continue
:跳过当前循环,继续下一次循环。
for i := 0; i < 10; i++ {
if i == 5 {
continue
}
fmt.Println(i)
}
表示当 i
等于 5 时,跳过当前循环,继续下一次循环。
for-range
for-range
可以用来遍历数组、切片、字符串、map 等。
for index, value := range array {
// do something
}
忽略 index
参数:
for _, value := range array {
// do something
}
跳转控制
Go 中可以使用 label
和 goto
来实现跳转。
label:
// do something
goto label
例如:
var i int = 0
label:
fmt.Println(i)
i++
if i < 10 {
goto label
}
表示当 i
小于 10 时,跳转到 label
标签处。
也可以使用 goto 来跳出多层循环。
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 5 {
goto breakTag
}
}
}
breakTag:
fmt.Println("done")