由浅到深认识Go语言(5):控制流程

本文介绍了作者分享的SpringBoot项目初始化模板,涵盖if、else、elseif和switch等基本的Go语言流程控制结构,以及在实际场景中的应用实例,适合初学者学习和进阶。
摘要由CSDN通过智能技术生成

该文章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一样,在条件部分初始化值
case1:
    要执行的代码1
case2:
    要执行的代码2
case3:
    要执行的代码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()
   }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下一章:由浅到深认识Go语言(5):函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值