该文章Github地址:https://github.com/AntonyCheng/go-notes【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】
在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】& CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!
上一章:由浅到深认识Go语言(4):常量&运算符
6.流程控制
6.1.分支结构
6.1.1.if
基本结构:
if 条件语句 {
结构体……
}
示例如下:
package main
import "fmt"
func main() {
if true {
fmt.Println("为真就打印")
}
age := 19
if age >= 18 {
fmt.Println("成年就打印")
}
if num := 10; num == 10 {
fmt.Println("if语句还支持一个初始化语句,初始化语句和条件判断语句以分号隔开")
}
}
打印效果如下:
案例一:
让用户输入用户名和密码,如果用户名为admin,密码为mypass,则提示登录成功;
package main
import "fmt"
func main() {
account := ""
password := ""
fmt.Println("请输入账号:")
fmt.Scan(&account)
fmt.Println("请输入密码:")
fmt.Scan(&password)
if account == "admin" && password == "mypass" {
fmt.Println("登陆成功!")
}
}
打印效果如下:
6.1.2.if…else…
基本结构:
if 条件语句 {
满足条件的结构体……
} else { //结构一定是这样,go语言不支持其他格式,例如else换行就不行
不满足条件的结构体……
}
案例一:
小赵的考试成绩大于90(含)分,那么爸爸奖励他100元钱,否则的话,爸爸就让小赵抄课文。
package main
import "fmt"
func main() {
score := 0
fmt.Println("请输入小赵的分数:")
fmt.Scan(&score)
if score >= 90 {
fmt.Println("奖励100元")
} else {
fmt.Println("抄课文")
}
}
打印效果如下:
案例二:
输入一个数字,判断是否为偶数,如果是输出"该数是偶数”,否则输出"该数是奇数;
package main
import "fmt"
func main() {
num := 0
fmt.Println("请输入一个数字:")
fmt.Scan(&num)
if num%2 == 0 {
fmt.Println("该数是偶数")
} else {
fmt.Println("该数是奇数")
}
}
打印效果如下:
案例三:
输入公交卡当前的余额,只要超过2元,就可以上公交车,上车以后如果空座位的数量大于0,就可以坐下;
package main
import "fmt"
func main() {
money := 0
fmt.Println("请输入余额:")
fmt.Scan(&money)
if money > 2 {
fmt.Println("已经上车!")
seat := 0
fmt.Println("请输入空座位数量:")
fmt.Scan(&seat)
if seat > 0 {
fmt.Println("有位置!可以坐下!")
} else {
fmt.Println("没有位置!不能坐下!")
}
} else {
fmt.Println("不能上车!")
}
}
打印效果如下:
6.1.3.if…else if…
基本结构:
if 条件语句1 {
满足条件1的结构体……
} else if 条件语句2 { //结构一定是这样,go语言不支持其他格式,例如else if换行就不行
满足条件2的结构体……
} else if 条件语句3 {
满足条件3的结构体……
} else {
满足其他条件的结构体……
}
案例一:
成绩有以下分级:
- 90-100 ==> A
- 80-89 ==> B
- 70-79 ==> C
- 60-69 ==> D
- 0-59 ==> E
package main
import "fmt"
func main() {
score := 0
fmt.Println("请输入成绩:")
fmt.Scan(&score)
if score < 0 {
fmt.Println("分数不能小于0")
} else if score < 60 {
fmt.Println("E")
} else if score < 70 {
fmt.Println("D")
} else if score < 80 {
fmt.Println("C")
} else if score < 90 {
fmt.Println("B")
} else if score <= 100 {
fmt.Println("A")
} else {
fmt.Println("分数不能超过100")
}
}
打印效果如下:
案例二:
提示用户输入用户名,然后再提示输入密码,如果用户输入的用户名是“admin”并目密码是“88888”,则提示正确,否则,如果用户名是admin提示密码错误(用户名输入正确,密码输入错误)如果密码是“88888”提示用户名错误(密码输入正确,用户名输入错误)。
package main
import "fmt"
func main() {
username := ""
password := ""
fmt.Println("请输入用户名:")
fmt.Scan(&username)
fmt.Println("请输入密码:")
fmt.Scan(&password)
if username == "admin" && password == "88888" {
fmt.Println("登陆成功!")
} else if username != "admin" && password == "88888" {
fmt.Println("密码输入正确,用户名输入错误!")
} else if username == "admin" && password != "88888" {
fmt.Println("用户名输入正确,密码输入错误!")
} else {
fmt.Println("用户名和密码都不对!")
}
}
打印效果如下:
6.1.4.switch
基本结构:
switch (初始化语句;)变量或表达式{ //这里也可以像if一样,在条件部分初始化值
case 值1:
要执行的代码1
case 值2:
要执行的代码2
case 值3:
要执行的代码3
……
default:
默认执行的代码
}
switch语句中,case后面默认自带break,这一点要谨记;
由于每个case后面都自带有一个break,所以如果想强制执行后面的case,需要使用fallthrough关键字;
package main
import "fmt"
func main() {
num := 1
switch {
case num <= 1:
fmt.Println("第一次执行")
fallthrough
case num <= 2:
fmt.Println("第二次执行")
default:
fmt.Println("第三次执行")
}
}
打印效果如下:
案例一:
输入数字1-7,输出”星期一“、……、”星期日“;
package main
import "fmt"
func main() {
date := 0
fmt.Println("请输入今天的星期:")
fmt.Scan(&date)
switch date {
case 1:
fmt.Println("星期一")
case 2:
fmt.Println("星期二")
case 3:
fmt.Println("星期三")
case 4:
fmt.Println("星期四")
case 5:
fmt.Println("星期五")
case 6:
fmt.Println("星期六")
case 7:
fmt.Println("星期日")
default:
fmt.Println("输入有误")
}
}
打印效果如下:
案例二:
考试成绩大于等于90输出A,大于等于80输出B,大于等于70输出C,大于等于60输出D,不及格输出E;
package main
import "fmt"
func main() {
score := 0
fmt.Println("请输入成绩:")
fmt.Scan(&score)
switch {
case score < 0:
fmt.Println("输入成绩无效")
case score < 60:
fmt.Println("E")
case score < 70:
fmt.Println("D")
case score < 80:
fmt.Println("C")
case score < 90:
fmt.Println("B")
case score <= 100:
fmt.Println("A")
default:
fmt.Println("输入成绩无效")
}
}
打印效果如下:
案例三:
李四的年终工作评定:
如果定为A级,则工资涨500元;
如果定为B级,则工资涨200元;
如果定为C级工资不变;
如果定为D级,则工资降200元;
如果定为E级,则工资降500元;
设李四的原工资为5000,请用户输入李四的评级然后显示李四来年的工资;
package main
import "fmt"
func main() {
salary := 0
level := ""
fmt.Println("请输入薪资:")
fmt.Scan(&salary)
fmt.Println("请输入工作定级:")
fmt.Scan(&level)
switch level {
case "A":
salary += 500
fmt.Println(salary)
case "B":
salary += 200
fmt.Println(salary)
case "C":
fmt.Println(salary)
case "D":
salary -= 200
fmt.Println(salary)
case "E":
salary -= 500
fmt.Println(salary)
default:
fmt.Println("Unknown data")
}
}
打印效果如下:
案例四:
请用户输年份,再输入月份,输出该月的天数(需要考虑闺年);
package main
import "fmt"
func main() {
year := 0
month := 0
fmt.Println("请输入年份:")
fmt.Scan(&year)
fmt.Println("请输入月份:")
fmt.Scan(&month)
if year%400 == 0 || (year%4 == 0 && year%100 != 0) {
switch month {
case 1:
fmt.Println(31)
case 2:
fmt.Println(28)
case 3:
fmt.Println(31)
case 4:
fmt.Println(30)
case 5:
fmt.Println(31)
case 6:
fmt.Println(30)
case 7:
fmt.Println(31)
case 8:
fmt.Println(31)
case 9:
fmt.Println(30)
case 10:
fmt.Println(31)
case 11:
fmt.Println(30)
case 12:
fmt.Println(31)
}
} else {
switch month {
case 1:
fmt.Println(31)
case 2:
fmt.Println(29)
case 3:
fmt.Println(31)
case 4:
fmt.Println(30)
case 5:
fmt.Println(31)
case 6:
fmt.Println(30)
case 7:
fmt.Println(31)
case 8:
fmt.Println(31)
case 9:
fmt.Println(30)
case 10:
fmt.Println(31)
case 11:
fmt.Println(30)
case 12:
fmt.Println(31)
}
}
}
打印效果如下:
6.2.循环结构
Go语言中只有for循环,没有while和do……while循环;
基本结构:
for 初始化变量;判断条件;修正变量(){
循环体……
}
当然break,continue,return关键字的作用和其他语言的作用相同;
for range结构:
for range结构主要用于数组,集合等结构;
for index,value := range 集合名(数组名){
循环体……
}
- index:集合索引
- value:对应索引的值
示例如下(下面涉及还没有学习到的结构,只需要观察结果即可):
package main
import "fmt"
func main() {
arr := [5]int{10, 20, 30, 40, 50}
for index, value := range arr {
fmt.Printf("%d = %d\n", index, value)
}
}
打印效果如下:
但是通常我们并不需要操作一个数组或者集合的索引,所以我们可以把基本结构改成如下:
for _,value := range 集合名(数组名){
循环体……
}
示例如下:
package main
import "fmt"
func main() {
arr := [5]int{10, 20, 30, 40, 50}
for _, value := range arr {
fmt.Printf("%d\n", value)
}
}
打印效果如下:
案例一:
求1-100的偶数之和;
package main
import "fmt"
func main() {
num := 0
for i := 0; i <= 100; i += 2 {
num += i
}
fmt.Println("num =", num)
}
打印效果如下:
案例二:
要求用户输入用户名和密码,只要不是admin、888888就一直提示用户名,密码错误,请重新输入。
package main
import "fmt"
func main() {
username := ""
password := ""
for {
fmt.Println("请输入用户名:")
fmt.Scan(&username)
fmt.Println("请输入密码:")
fmt.Scan(&password)
if username != "admin" || password != "888888" {
fmt.Println("用户名和密码错误!")
} else {
fmt.Println("登陆成功!")
break
}
}
}
打印效果如下:
案例三:
用户名密码输入错误,最多输错3次,超过3次,提示“输入错误信息次数太多,并且结束整个程序“;
package main
import "fmt"
func main() {
username := ""
password := ""
for i := 0; i < 3; i++ {
fmt.Println("请输入用户名:")
fmt.Scan(&username)
fmt.Println("请输入密码:")
fmt.Scan(&password)
if username != "admin" || password != "888888" {
fmt.Println("用户名和密码错误!")
} else {
fmt.Println("登陆成功!")
break
}
if i == 2 {
fmt.Println("输入错误信息次数太多!")
}
}
}
打印效果如下:
案例四:
2006年营业额80000元,每年增长25%,请问按此增长速度,到哪一年营业额将达到20万元;
package main
import "fmt"
func main() {
money := 80000.0
count := 0
for {
money += money * 0.25
count++
if money > 200000 {
break
}
}
fmt.Printf("到%d年可以达到20万\n", 2006+count)
}
打印效果如下:
案例五:
找出100-999之间的水仙花数;
package main
import "fmt"
func main() {
for i := 100; i < 1000; i++ {
a := i % 10
b := i % 100 / 10
c := i / 100
if a*a*a+b*b*b+c*c*c == i {
fmt.Println(i)
}
}
}
打印效果如下:
案例六:
编写三角乘法口诀表;
package main
import "fmt"
func main() {
for i := 1; i < 10; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%d*%d=%d ", j, i, i*j)
}
fmt.Println()
}
}
打印效果如下: