4、go的流程控制
if单分支
var count int = 20
if count < 30 {
fmt.Println("库存不足")
}
// 另一种写法: if后面可以并列加入变量定义, 使用分号;隔开
if a := 20; a < 30 {
fmt.Println("库存不足a")
}
if双分支
var count int = 30
if count < 30 {
fmt.Println("库存不足")
} else {
fmt.Println("库存足够")
}
// 另一种写法: if后面可以并列加入变量定义, 使用分号;隔开
if a := 30; a < 30 {
fmt.Println("库存不足a")
} else {
fmt.Println("库存刚好够")
}
if多分支
虽然用但分支也可以,但是后面的其他单分支逻辑也会走,所以不如用多分支
var score int = 97
if score >= 90 {
fmt.Println("成绩为A级别")
} else if score >= 80 {
fmt.Println("成绩为B级别")
} else if score >= 70 {
fmt.Println("成绩为C级别")
} else if score >= 60 {
fmt.Println("成绩为D级别")
} else {
fmt.Println("成绩为E级别")
}
switch分支
go里面的switch没有break
var score int = 90
switch score / 10 {
case 10:
fmt.Println("S级")
case 9:
fmt.Println("A级")
case 8:
fmt.Println("B级")
case 7:
fmt.Println("C级")
case 6:
fmt.Println("D级")
default:
fmt.Println("E级")
}
// 写法2:case可以给多个值,使用逗号, 隔开
var score int = 100
switch score / 10 {
case 10, 9:
fmt.Println("A级")
case 8, 7:
fmt.Println("B级")
case 6:
fmt.Println("C级")
default:
fmt.Println("E级")
}
// 写法3: 在switch后面定义变量,记得要加分号;
switch score := 9; {
case score >= 9:
fmt.Println("A级")
case score >= 7:
fmt.Println("B级")
case score >= 6:
fmt.Println("C级")
default:
fmt.Println("E级")
}
// 写法4:fallthrough关键字可以让执行下面一个分支
var score int = 100
switch score / 10 {
case 10, 9:
fmt.Println("A级") // 会打印
fallthrough
case 8, 7:
fmt.Println("B级") // 因为上面的case加了fallthrough, 所以下面的一个case也会打印
case 6:
fmt.Println("C级")
default:
fmt.Println("E级")
}
for循环
var sum int
// 注意for里面定义变量的写法
for i := 1; i <= 5; i++ {
sum += 1
}
fmt.Println(sum) // 5
// 死循环写法
for {
fmt.Println("lalalala~~~~")
}
// for range 用法
// 如果写for循环打印字符
var str string = "hello golang"
// len函数是取字符长度的
for i := 0; i < len(str); i++ {
fmt.Printf("%c \t", str[i]) // h e l l o g o l a n g
}
// 方式2: for range
// 语法:str是要遍历的值,使用range关键字,值被value接收,索引被i接收
for i, value := range str {
fmt.Printf("索引:%d, 值:%c \n", i, value)
}
// 打印:
// 索引:1, 值:e
// 索引:2, 值:l
// 索引:3, 值:l
// 索引:4, 值:o
// 索引:5, 值:
// 索引:6, 值:g
// 索引:7, 值:o
// 索引:8, 值:l
// 索引:9, 值:a
// 索引:10, 值:n
// 索引:11, 值:g
// break细节 continue也是一样的使用
// 正常使用跳出当前循环内的一个循环,外层循环还在继续循环
for i := 1; i <= 5; i++ {
for j := 1; j <= 5; j++ {
fmt.Printf("i: %v, j: %v \n", i, j)
if i == 1 && j == 1 {
break
}
}
}
// 使用标签结束具体的循环,continue也可以这样使用
lable1:
for i := 1; i <= 5; i++ {
for j := 1; j <= 5; j++ {
fmt.Printf("i: %v, j: %v \n", i, j)
if i == 1 && j == 1 {
break lable1
}
}
}
《三体》中有句话——弱小和无知不是生存的障碍,傲慢才是。
所以我们不要做一个小青蛙