流程控制
分支控制
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")