Golang流程控制

流程控制语句

程序是由语句构成,而流程控制语句 是用来控制程序中每条语句执行顺序的语句。可以通过控制语句实现更丰富的逻辑以及更强大的功能。几乎所有编程语言都有流程控制语句,功能也都基本相似。
其流程控制方式有

  • 顺序结构
  • 分支结构
  • 循环结构

这里最简单最常用的就是顺序结构,即语句从上至下一一执行。
在这里插入图片描述

分支语句

顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。

单分支语句

语法:

if 布尔表达式 {  // 注意左花括号必须与表达式同行
   /* 在布尔表达式为 true 时执行 */
}

在这里插入图片描述

双分支语句

双分支语句顾名思义,二条分支二选一执行!
语法:

if 布尔表达式 {
    ***
}else {
    ***
}

在这里插入图片描述

if多分支语句

多分支即从比双分支更多的分支选择一支执行。
语法:

if 布尔表达式 {
    ***
}else if 布尔表达式  {
    ***
}else if 布尔表达式  {
    ***
}else if 布尔表达式  {
    ***
}else{
   ***
}

在这里插入图片描述不管多少条分支只能执行一条分支!

switch多分支语句

语法:

switch var {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

在这里插入图片描述switch语句也是多分支选择语句,执行哪一代码块,取决于switch后的值与哪一case值匹配成功,则执行该case后的代码块。

/*
给出如下选项,并根据选项进行效果展示:
    输入1:则输出"普通攻击"
    输入2:则输出"超级攻击"
    输入3:则输出"使用道具"
    输入3:则输出"逃跑"
*/

var choice int
fmt.Println("请输入选择:")
fmt.Scanln(&choice)
//fmt.Println(choice,reflect.TypeOf(choice))

switch choice {
     case 1:fmt.Println("普通攻击")
	case 2:fmt.Println("超级攻击")
	case 3:fmt.Println("使用道具")
	case 4:fmt.Println("逃跑")
	default:fmt.Println("输入有误!")
}

1、switch比if else更为简洁

2、执行效率更高。switch…case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch…case不用像if…else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。

3、到底使用哪一个选择语句,代码环境有关,如果是范围取值,则使用if else语句更为快捷;如果是确定取值,则使用switch是更优方案。

switch同时支持多条件匹配:

switch{
    case 1,2:
    default:
}

分支嵌套

// 分支嵌套
    var user string
	var pwd int

	fmt.Printf("请输入用户名:")
	fmt.Scanln(&user)
	fmt.Printf("请输入密码:")
	fmt.Scanln(&pwd)

	if user == "yuan" && pwd==123{
		var score int
		fmt.Printf("请输入成绩:")
		fmt.Scanln(&score)

		if score >= 90 && score<=100 {
			fmt.Println("成绩优秀!")
		} else if score >= 80 {
			fmt.Println("成绩良好!")
		} else if score >= 60 {
			fmt.Println("成绩及格")
		} else {
			fmt.Println("不及格!")
		}

	}else {
		fmt.Println("用户名或者密码错误!")
	}

循环语句

在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。

与其它主流编程语言不同的的是,Go语言中的循环语句只支持 for 关键字,而不支持 while 和 do-while 结构。
在这里插入图片描述

for循环

原始for循环

通过关系表达式或逻辑表达式控制循环

for  condition { }

简单循环案例:

count := 0   // 初始化语句
for count<10 {   // 条件判断
    fmt.Println(count)
    count ++  //  步进语句
}

无限循环案例:

/*
无限循环
for true{
	  
	}
*/

// 循环中嵌入分支语句
func main() {
	fmt.Printf(`
	1、普通攻击
	2、超级攻击
	3、使用道具
	4、逃跑
`)
	for true {
		var choice int
		fmt.Printf("请输入选择:")
		fmt.Scanln(&choice)
		//fmt.Println(choice,reflect.TypeOf(choice))

		switch choice {
		case 1:
			fmt.Println("普通攻击")
		case 2:
			fmt.Println("超级攻击")
		case 3:
			fmt.Println("使用道具")
		case 4:
			fmt.Println("逃跑")
		default:
			fmt.Println("输入有误!")
		}
	}
}

三要素for循环(核心)

将初始化语句、条件判断以及步进语句格式固定化的循环方式,本质上和上面的for循环没有区别。

for init;condition;post { 
    // 循环体语句
}
  • init: 初始化语句,一般为赋值表达式,给控制变量赋初值;

  • condition:条件判断,一般是关系表达式或逻辑表达式,循环控制条件;

  • post: 步进语句,一般为赋值表达式,给控制变量增量或减量。

for i := 1; i < 10; i++ {
		fmt.Println(i)
	}

执行流程:
在这里插入图片描述

退出循环

关键字:
break

退出循环
当 break 关键字用于 for 循环时,会终止循环而执行整个循环语句后面的代码。break 关键字通常和 if 语句一起使用,即满足某个条件时便跳出循环,继续执行循环语句下面的代码。

for i := 0; i < 10; i++ {
		if i==8{
			break
		}
		fmt.Println(":",i)
}

在这里插入图片描述

continue
不同于break退出整个循环,continue指的是退出当次循环。

for i := 0; i < 10; i++ {
		if i==8{
			continue
		}
		fmt.Println(":",i)
	}

在这里插入图片描述

循环嵌套

在一个循环体语句中又包含另一个循环语句,称为循环嵌套

独立嵌套

在控制台上打印一个五行五列的矩形,如下图所示

*****
*****
*****
*****
*****
for i := 0; i < 5; i++ {
    
    for j:=0;j<5;j++ {
        fmt.Print("*")
    }
    fmt.Print("\n")
}
关联嵌套

在控制台上打印一个如下图所示的三角形

*
**
***
****
*****
for i := 0; i < 5; i++ {
    for j := 0; j <= i; j++ {
        fmt.Printf("*")
    }
    fmt.Println()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值