3、分支与循环-GOLANG

分支

if分支

生活中我们会遇到一些判断的情况,比如你考了80分以上回家会有奖励,考了60分以下回家会挨打。某个影视作品开了会员你才可以看。针对这些情况在代码里我们配合布尔类型,采用分支进行判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import (
"fmt"
)

func main() {

name := "xiu"
score := 99

if score >= 80 {
fmt.Println(name, "回家有奖品")
} else if score >= 60 && score < 80 {
fmt.Println(name, "回家可以正常吃饭")
} else {
fmt.Println(name, "回家要挨打!!")
}

}

获取键盘输入来自定义姓名与成绩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
func main() {

var name string
var score int

fmt.Println("请输入学生姓名:")
fmt.Scanln(&name)//& 用来取变量的内存地址
fmt.Println("请输入学生成绩:")
fmt.Scanln(&score)

if score >= 80 {
fmt.Println(name, "回家有奖品")
} else if score >= 60 && score < 80 {
fmt.Println(name, "回家可以正常吃饭")
} else {
fmt.Println(name, "回家要挨打!!")
}

}

image-20230302092840271

switch分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

import (
"fmt"
)

func main() {

var name string
var score int

fmt.Println("请输入学生姓名:")
fmt.Scanln(&name)
fmt.Println("请输入学生成绩:")
fmt.Scanln(&score)
//匹配具体的值,如果区间判断采用if
switch score {
case 100:
fmt.Println(name, "回家有奖品")
case 79:
fmt.Println(name, "回家正常吃饭")
default:
fmt.Println(name, "回家挨打")
}

}

switch语句适合匹配具体的值,某些情况不适用,以下是错误逻辑示范,代码正常运行,但是程序明显不合理

image-20230302094743258

循环

在许多业务场景下我们需要让某一块代码重复执行,比如提供一个功能,当用户输入一个0-100的整数,程序会把小于这个数字的所有数字相加(不包括这个数字本身),那我们想想如何实现,通过if判断想想就头皮发麻,这个时候我们就可以引入循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import (
"fmt"
)

func main() {

var number int

fmt.Println("请输入1-100的整数:")
fmt.Scanln(&number)
sum := 0
for i := 0; i < number; i++ {
sum += i
}
fmt.Println("和为:", sum)
}

image-20230302095555063

image-20230302095704139

看上面这张图不难看出程序还是有bug的,比如我们输入了101,超出了提示的100,但是依旧执行了,其实只需要加个if判断即可,这种情况在开发里时不时出现,无害bug,并不影响程序正常功能,很多时候抱着多一事不如少一事的念头可能不会修复,而我们渗透测试人员要有意识,这个小bug是否可能配合其他漏洞达到一些不可告人的目的,这也是我们这个职业的主要工作内容

猜数字小游戏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main

import (
"fmt"
"math/rand"
)

func main() {

var number int
var num = rand.Intn(101)
for true {
fmt.Println("[1-100]")
fmt.Println("请输入您猜的数字:")
fmt.Scanln(&number)

if num == number {
fmt.Println("您猜对了")
break
} else if number > num {
fmt.Println("您猜大了")
} else {
fmt.Println("您猜小了")
}
}

}