05.流程控制
2023年1月6日约 1235 字大约 4 分钟
05.流程控制
Go语言支持最基本的三种程序运算结构:顺序结构,选择结构,循环结构。
- 顺序结构:程序按顺序执行,不发生跳转。
- 选择结构:依据是否满足条件,有选择的执行符合条件的程序。
- 循环结构:依据条件是否满足,循环多次执行某段代码。
1,if判断
1,if简单使用
package main
import "fmt"
func main() {
s := "王思聪"
//if和{就是条件,条件通常都是关系运算符
if s == "王思聪" { //左括号和if要在同一行
fmt.Println("左右一个妹子,右手一个大妈")
}
//if支持嵌入1个初始化语句,初始化语句和判断条件以分号分隔
if a := 10; a == 10 { //条件为真,则执行如下打印语句
fmt.Println("a = 10")
}
}
2,if复杂判断
package main
import "fmt"
func main() {
//1
a := 10
if a == 10 {
fmt.Println("a = 10")
} else {
fmt.Println("a != 10")
}
//2
if a := 9; a == 10 {
fmt.Println("a = 10")
} else {
fmt.Println("a != 10")
}
//注意,上边虽然两个例子里边都使用了变量a,但是并不会报冲突。
//3
b := 8
if a == 10 {
fmt.Println("b = 10")
} else if b < 10 {
fmt.Println("b < 10")
} else if b > 10 {
fmt.Println("b > 10")
} else {
fmt.Println("这是不可能的!")
}
//4
if b := 8; b == 10 {
fmt.Println("b = 10")
} else if b < 10 {
fmt.Println("b < 10")
} else if b > 10 {
fmt.Println("b > 10")
} else {
fmt.Println("这是不可能的!")
}
}
2,switch语句
switch语句与shell当中的case语句非常类似,只不过语法关键字稍微不同。
package main
import "fmt"
func main() {
num := 1
switch num { //switch后面写的是变量本身
case 1:
fmt.Printf("选择的楼层是%d层", num)
break //go语言也有break关键字,表示跳出switch语句,可以不写,默认就包含
fallthrough //表示不跳出switch语句,后面的无条件执行,不常用,了解即可
case 2:
fmt.Printf("选择的楼层是%d层", num)
//break
case 3:
fmt.Printf("选择的楼层是%d层", num)
//break
case 4:
fmt.Printf("选择的楼层是%d层", num)
//break
case 5:
fmt.Printf("选择的楼层是%d层", num)
//break
default: //用于匹配条件以外的情况
fmt.Println("您选择的楼层不存在!")
}
}
switch的一些其他用法介绍。
package main
import "fmt"
func main() {
//switch也支持直接初始化语句,初始化语句和变量本身以分号分隔
switch num := 4; num {
case 1:
fmt.Printf("选择的楼层是%d层", num)
case 2:
fmt.Printf("选择的楼层是%d层", num)
case 3, 4, 5: //如果有多个条件结果一样,那么多条件可以写在一起
fmt.Println("选择的是xx层")
case 6:
fmt.Printf("选择的楼层是%d层", num)
default: //用于匹配条件以外的情况
fmt.Println("您选择的楼层不存在!")
}
//还可以将条件写在case语句当中,示例如下:
score := 85
switch {
case score >= 90:
fmt.Println("优秀")
case score >= 80:
fmt.Println("良好")
case score >= 70:
fmt.Println("一般")
default:
fmt.Println("其他")
}
}
3,for循环
package main
import "fmt"
func main() {
/*标准格式如下:
for 初始条件; 判断条件; 条件变化 {
}
*/
//算出1+2+3...100的累加和
sum := 0
/*
1,初始条件 i := 1
2,判断条件 i <= 100 是否为真,如果为真,则执行循环体,如果为假,则跳出
3,条件变化 i++
4,重复 第2,3,4步
*/
for i := 1; i <= 100; i++ {
sum = sum + i
}
fmt.Println("sum =", sum)
}
4,range关键字
package main
import "fmt"
func main() {
str := "abc"
//通过for打印每个字符
for i := 0; i < len(str); i++ {
fmt.Printf("str[%d]=%c\n", i, str[i])
}
//range表示迭代打印每个元素,默认返回2个值:一个是元素的位置,一个是元素的值
for i, data := range str { //i表示的是元素的位置(0,1,2),data表示的是元素对应的值(a,b,c)
fmt.Printf("str[%d]=%c\n", i, data)
}
//等价于如下写法:
for i := range str { //第2个返回值,默认丢弃,返回元素的位置(下标)
fmt.Printf("str[%d]=%c\n", i, str[i])
}
//又等价于如下写法
for i, _ := range str {
fmt.Printf("str[%d]=%c\n", i, str[i])
}
}
5,break和continue
break表示跳出当前循环。 continue表示跳出本次循环。
注意:break可以用于for,switch,select,而continue只能用在for循环当中。
package main
import (
"fmt"
"time"
)
func main() {
i := 0
for { //for后边不写任何东西,表示这个循环条件永远为真,即死循环,或者无限循环
i++
time.Sleep(time.Second) //表示sleep 1 s
if i == 5 {
//break //跳出循环,如果嵌套多个循环,则跳出最近的那个内循环
continue //跳出本次循环
}
fmt.Println("i =", i)
}
}
6,goto关键字
package main
import (
"fmt"
)
func main() {
//注释掉上边的fmt包,可以单独测试如下两个关键字
//break //输出:break is not in a loop, switch, or select
//continue //输出:continue is not in a loop
//goto可以用在任何地方,但是不能够跨函数使用
fmt.Println("1111111")
goto End //goto是关键词,End是自定义的标签
fmt.Println("2222222")
End:
fmt.Println("3333333")
}
但是日常写代码不建议使用这个关键字,会显得代码比较乱。
Powered by Waline v2.9.1