go语言的流程控制语句主要有if、for、switch三种。
1. if语句
语法1:
if 条件表达式 {
}
if语句条件表达式,不需要括号包括起来, 左边的 { 花括号不能换行。
例子:
package main
import "fmt"
// 入口函数main
func main() {
// 给变量i赋值
i := 101
if i > 100 {
fmt.Println("大于100")
}
}
语法2:
if 初始化语句; 条件表达式 {
}
可以在条件表达式之前,编写简单的初始化语句。
例子:
package main
import "fmt"
// 入口函数main
func main() {
// 先执行初始化语句,i变量初始化值为200,然后判断条件。
if i := 200; i > 100 {
fmt.Println("大于100")
}
}
语法3:
// 格式1
if 条件表达式 {
} else {
}
// 格式2
if 条件表达式1 {
} else if 条件表达式2 {
} else {
}
例子:
package main
import "fmt"
// 入口函数main
func main() {
if i := 200; i > 100 {
fmt.Println("大于100")
} else { // 注意 花括号 { 不能换行
fmt.Println("小于100")
}
}
2. for循环语句
Go语言的for语句,非常灵活,可以表达其他语言的for、while循环语句。
语法1:
这种语法格式,跟其他语言类似,区别就是忽略了括号。
for 初始化语句; 条件表达式; 后置语句 {
}
- 初始化语句 - 循环开始之前执行的语句
- 条件表达式 - 每次循环迭代开始之前执行的表达式
- 后置语句 - 每次循环迭代结束之后执行的语句
例子:
package main
import "fmt"
func main() {
sum := 0
// 循环10次
for i := 0; i < 10; i++ { // 注意: { 括号不能换行
sum += i
}
fmt.Println(sum)
}
语法2:
for 条件表达式 {
}
忽略了初始化语句和后置语句,这种语法就变成了,其他语言的while语句。
例子:
package main
import "fmt"
func main() {
sum := 1
// 类似while语句,如果sum < 1000 则执行循环
for sum < 1000 {
sum += sum
}
fmt.Println(sum)
}
语法3:
for {
}
忽略了,条件表达式,这种语法表示死循环,在网络编程中非常常用。
例子:
package main
import (
"fmt"
"time"
)
func main() {
// 死循环,每秒打印一次hello
for {
fmt.Println("hello")
time.Sleep(time.Second)
}
}
3. switch语句
语法:
switch 初始化语句; 条件表达式 {
case 条件1:
语句1
case 条件2:
语句2
default:
默认语句
}
说明:
- 初始化语句是可选的
- 条件表达式也是可选的
- case语句不需要break,匹配多个case语句,只会执行第一个case语句。
例子:
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Print("当前系统环境是: ")
// 我们通过runtime包的GOOS常量判断,当前系统环境
// 首先通过初始化语句,获取系统常量,然后通过os变量判断case语句
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.")
case "linux":
fmt.Println("Linux.")
default:
// 其他系统
fmt.Printf("%s.\n", os)
}
}
例子2:
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("什么时候到星期6?")
// 获取今天是一周的第几天
today := time.Now().Weekday()
// time.Saturday = 6
// 通过switch判断,到星期六还有几天
switch time.Saturday {
case today + 0:
fmt.Println("今天.")
case today + 1:
fmt.Println("明天.")
case today + 2:
fmt.Println("还有两天.")
default:
fmt.Println("还有好多天.")
}
}
- case语句支持表达式计算。
例子3:
package main
import (
"fmt"
"time"
)
func main() {
// 通过time包的Now函数获取当前时间
t := time.Now()
// switch忽略了表达式
switch {
case t.Hour() < 12:
fmt.Println("早上好!")
case t.Hour() < 17:
fmt.Println("下午好.")
default:
fmt.Println("晚上好.")
}
}
switch语句忽略表达式之后,case语句就变成if语句了,那个case语句的表达式判断成功就执行那个。(如果有多个case语句表达式匹配成功,只会执行第一个case语句)