一、流程控制
控制语句分为三类:顺序、选择、循环
二、顺序控制
1) 从上到下一条一条执行
三、分支控制
1) 单分支
2) 双分支
3) 多分支
四、if单双多分支
// 分支流程控制
func goIf() {
// 设置随机数种子
rand.Seed(time.Now().UnixNano())
// 单分支
num := rand.Intn(200)
fmt.Println("num:", num)
if num < 50 {
fmt.Println("num 小于50")
}
// 双分支
if num < 20 {
fmt.Println("多分支小于20")
} else {
fmt.Println("多分支其他")
}
// 多分支
age := rand.Intn(100) + 1
fmt.Println("年龄:", age)
if age <= 18 {
fmt.Println("小朋友")
} else if age > 18 && age < 65 {
fmt.Println("大朋友啦")
} else {
fmt.Println("老小孩")
}
}
五、switch分支控制
1) switch 从上到下逐一匹配,直到匹配为止。
2) 匹配项后面也不需要再加 break 与php不同
表达式
switch 表达式 {
case表达式,表达式2 :
语句块
default:
语句块
}
Js 与 PHP 的switch
switch(变量/表达式) {
case 值1:
// case 1的代码块
break;
default:
// default的代码块
}
switch使用注意事项
1.switch / case后是一个表达式 (即:常量值,变量、一个有返回值的函等都可以)
2.case 后是常量,则不能重复
3.case 后表达式 和 switch 后表达式 类型必须一样
4.case 后面可以带多个值,使用逗号分隔,比如 case 值 1, 值 2
5.case 后面不需要带 break,区别于Java php js
6.default 语句不是必须的,位置也是可以随意的
7.switch 后也可以不带表达式,当做 if 分支来使用 ----- 不推荐
8.switch 后也可以直接声明 / 定义一个变量,分号结束,不推荐
9.switch 穿透,利用 fallthrough 关键字,如果在 case 语句块后增加 fallthrough,
则会继续执行下一个 case, 也叫 switch 穿透 ---- 不推荐使用
// switch语句
func goSwitch() {
// 分数分等级
score := rand.Intn(100)
fmt.Println(score)
b := 8
switch score / 10 { // switch 后跟 常量、变量、函数
case 9, 10: // 可以多个
fmt.Println("A")
case b: // 可以变量
fmt.Println("B")
case 7: // 可以常量,常量不能重复
fmt.Println("C")
case getInt(): // 可以函数返回值
fmt.Println("D")
default: // 不一定需要default
fmt.Println("E")
}
}
func getInt() int {
return 6
}
八、for循环控制
for i := 1; i <= 10; i++{
}
// for 循环
func goFor() {
// 经典
for i := 1; i < 10; i++ {
fmt.Println("for循环i:", i)
}
// 类似php的while循环while(条件表达式){}
j := 1
for j < 3 {
fmt.Println("for循环j:", j)
j++
}
// 类似php的do….while循环do{} while(条件表达式)
k := 1
for {
fmt.Println("for循环k:", k)
if k > 3 {
break
}
k++
}
// 类似PHP的foreach 可以方便遍历字符串和数组
str := "ab我们"
for index, val := range str {
fmt.Printf("index=%d,val=%c\n", index, val)
}
}
九、跳转语句
1) break 默认跳出最近的for循环,可以用标签指定跳出标签对应的 for 循环
label:
for m := 0; m < 3; m++ {
for n := 0; n < 2; n++ {
fmt.Println("m是:", m, "n是:", n)
if m == 2 {
break label
}
}
}
2) continue 跳过本次循环
3) goto 一般不使用
// goto
l1 := 30
if l1 > 10 {
goto label1
}
fmt.Println("goto1")
fmt.Println("goto2")
label1:
fmt.Println("goto3")
fmt.Println("goto4")
// 打印goto3 goto4
4) return 跳出函数,哪里调用就return到哪里