一、流程控制
程序设计语言的流程控住语句,用于设定计算执行的次序,建立程序的逻辑结构。可以说,流程控制语句是整个程序的骨架。
从根本上讲,流程控制只是为了控制程序语句的执行顺序,一般需要与各种条件配合,因此,在各种流程中,会加入条件判断语句。流程控制语句一般起以下3个作用:
- 选择: 即根据条件跳转到不同的执行序列;
- 循环,即根据条件反复执行某个序列,当然每一次循环执行的输入输出可能会发生变化;
- 跳转,即根据条件返回到某执行序列。
go语言支持如下的几种流程控制语句:
- 条件语句:所对应的的关键字为if ,else和else if
- 选择语句:所对应的的关键字为switch,case和select
- 循环语句:所对应的的关键字为for和range
- 跳转语句:所对应的的关键字为nreak,continue和goto
1.条件语句
1.1 if语句
s := "王思聪"
//if就是条件,条件通常都是关系运算符
if s == "王思聪" {
fmt.Println("天神下凡一垂四")
}
------此方法更加简便-------------
//简化但条件分支
if a := 128; a == 128 {
fmt.Println("a=10")
}
1.2 if ..,else语句
//第一种
a := 1
if a == 10 {
fmt.Println("a == 10")
} else if a > 10 {
fmt.Println("a > 10")
} else if a < 10 {
fmt.Println("a < 10")
}
//第二种(更加简便)
b := 11
if b == 10 {
fmt.Println("b==10")
}
if b > 10 {
fmt.Println("b > 10")
}
if b < 10 {
fmt.Println("b < 10")
}
//if...else
if a := 8; a == 10 {
fmt.Println("a = 10")
} else if a > 10 {
fmt.Println("a > 10")
} else if a < 10 {
fmt.Println("a < 10")
} else {
fmt.Println("这是不可能的")
}
2.选择语句
2.1 switch语句
var num int
fmt.Println("请按下你的楼层:")
fmt.Scan(&num)
switch num {
case 1:
fmt.Println("按下的是1楼")
break //go语言中保留了break关键字,跳出switch语言。但是语言内部默认存在
case 2:
fmt.Println("按下的是2楼")
case 3:
fmt.Println("按下的是3楼")
fallthrough //不跳出switch语句,后面的无条件执行,即输入三层,会提示的按下3蹭四层
case 4:
fmt.Println("按下的是4楼")
default:
fmt.Println("按下的是xxxx楼")
}
- 案例补充
score := 85
switch { //可以没有条件
case score > 90: //case后面可以放条件
fmt.Println("优秀")
case score > 80:
fmt.Println("良好")
case score > 70:
fmt.Println("一般")
default:
fmt.Println("其他")
3. 循环语句
3.1 for循环语句
与多数语言不同的是,go语言的循环语句中只支持for关键字。且关键字for的基本用法与C近似。
- 语法格式 for 初始化条件 ; 判读条件 ;变换条件{ // }
对1-100进行累加求和
sum := 0
for i := 1; i <= 100; i++ {
sum = sum + i
}
fmt.Println("sum =", sum)
3.2 range循环语句
str := "abc"
//通过for打印每个字符
for i := 0; i < len(str); i++ {
fmt.Printf("str[%d]=%c\n", i, str[i])
}
//使用range关键字:迭代打印每个元素,默认两个返回值,一个是元素位置一个是元素本身
for i, data := range str {
fmt.Printf("str[%d]=%c\n", i, data)
}
//一个参数的使用
for i := range str { //第二个返回值,默认丢弃,返回元素的位置(下标)
fmt.Printf("str[%d]=%c\n", i, str[i])
}
4.跳转语句
4.1 break和continue
在循环中,break的操作是跳出当前循环,continue是跳出本次循环。区别:break可以用在for,switch,select中,而continue仅能用于for循环
i := 0
for { //for后面不写任何东西,这个循环条件永远为真
i++
time.Sleep(time.Second) //延迟一秒
if i == 7 {
break //跳出循环,如果嵌套多个循环,跳出最近的那个循环
//continue //跳出本次循环,下一次继续
}
fmt.Println("i =", i)
}