Go 中的流程控制主要有if else
,for
,for range
和 switch
。
if else 条件判断
与大多数语言中的 if else
类似,它的结构如下:
if 表达式1 {
分支1
} else if 表达式2 {
分支2
} else{
分支3
}
不同之处在于,它的表达式部分不需要用 ()
包住。例子:
package main
import "fmt"
func main() {
score := 65
if score >= 90 {
fmt.Println("A")
} else if score >= 80 {
fmt.Println("B")
} else {
fmt.Println("C")
}
}
还有需要注意的是,它的起始花括号必须紧跟表达式后面,不可以另起一行,像这样就是错的:
func main() {
score := 65
if score >= 90
{ // 起始 { 不可以单独一行,需要紧跟表达式后面
fmt.Println("A")
}
}
除此之外, if
条件判断还有一个特殊写法:
func main() {
if score := 65; score >= 90 {
fmt.Println("A")
} else if score >= 80 {
fmt.Println("B")
} else {
fmt.Println("C")
}
fmt.Println(score) // error,获取不到score
}
此种写法将变量赋值放到 if 表达式中,此时变量 score
是一个局部变量,在 if 之外是获取不到的。
for 循环
Go 中的 for 循环与大多数语言也类似,结构:
for 初始语句;条件表达式;结束语句{
循环体语句
}
它与 if else
一样,一是表达式不用 ()
来包住;二是起始 {
要紧跟在语句后面,不可以另起一行。
例子:
func main() {
for i := 0; i < 10; i++ {
fmt.Println(i)
}
}
for 循环的初始语句可以忽略,但初始语句后面的 ;
必须写:
func main() {
i := 0
for ; i < 10; i++ {
fmt.Println(i)
}
}
例子中变量 i
的初始化拿到 for 循环的外面实现了,for 循环依旧可以执行。
不仅仅初始语句可以忽略,结束语句也可以忽略,如下:
func main() {
i := 0
for i < 10 {
fmt.Println(i)
i++
}
}
例子中,for 循环语句只保留了条件表达式,初始语句和结束语句都被拆出来实现,for 循环正常执行。
switch case
Go 中 switch case
与多数语言中的也类似,用法也是大同小异。
基本用法:
func main() {
week:=3
switch week {
case 0:
fmt.Println("周日")
case 1:
fmt.Println("周一")
case 2:
fmt.Println("周二")
case 3:
fmt.Println("周三")
case 4:
fmt.Println("周四")
case 5:
fmt.Println("周五")
default:
fmt.Println("周六")
}
}
注意每个 switch 只能有一个 default。
一个分支可以有多个值,多个case值中间使用英文逗号分隔:
func main() {
num:=1
switch num {
case 1,3,5,7,9:
fmt.Println("这是奇数")
case 2,4,6,8,0:
fmt.Println("这是偶数")
default:
fmt.Println(num)
}
}
也可以把赋值放在switch里:
func main() {
switch num:=1; num {
case 1,3,5,7,9:
fmt.Println("这是奇数")
case 2,4,6,8,0:
fmt.Println("这是偶数")
default:
fmt.Println(num)
}
}
分支还可以使用表达式,这时候switch语句后面不需要再跟判断变量。例如:
func main() {
score:=90
switch {
case score>=90:
fmt.Println("优秀")
case score>=80:
fmt.Println("良好")
case score>=60:
fmt.Println("及格")
}
}
fallthrough 可以执行满足条件的 case 的下一个 case:
func main() {
b:=true
switch b {
case true:
fmt.Println(1)
fallthrough
case false:
fmt.Println(2)
}
}
如上,不加 fallthrough 只打印 1,加上 fallthrough 打印 1 和 2。
for range
Go 语言中的 for range
是一个强大的功能,它可以遍历数组,切片,字符串,map 和 通道(channel)。各自遍历出的结果是:
- 数组,切片和字符串遍历返回索引和值
- map 返回键和值
- 通道只返回通道内的值
这些在后面遇到具体类型时会一一介绍,这里就略过了。
结尾
本节主要介绍了 Go 中的流程控制,与大多数语言中用到的基本大同小异,个别差异注意一下就可以。
如有错误,欢迎指出。