流程控制语句

控制语句分类

顺序:先执行a,再执行b

选择:如果。。。,则。。。

循环:如果。。。,则再继续

if条件表达式

if 条件表达式{

        代码逻辑

}

 条件表达式左右的()可以不写,也建议不写

if和表达式中间一定要有空格

在Go中{  }是必须有的

在golang里,if后面可以并列的加入变量的定义

package main

import "fmt"

func main() {
	// if num := 10; num < 30 {
	// 	fmt.Println("对不起,余额不足")
	// }

	if abs := 20; abs > 10 {
		fmt.Println("余额充足,请刷卡")
	}

}

if 条件表达式{

        逻辑代码1

} else{

        逻辑代码2

}

 当表达式成立时执行逻辑代码1,不成立时执行逻辑代码2。{}也是必须有

if 条件表达式1{

        逻辑代码1

}else if 条件表达式2{

        逻辑代码2

}else if 条件表达式3{

        逻辑代码3

}

	var num int
	fmt.Println("请输入学生成绩:")
	fmt.Scanln(&num)

	if num >= 90 {
		fmt.Println("成绩等级为A")
	} else if num >= 80 {
		fmt.Println("成绩等级为B")
	} else if num >= 70 {
		fmt.Println("成绩等级为C")
	} else if num >= 60 {
		fmt.Println("成绩等级为D")
	} else {
		fmt.Println("成绩等级为E")
	}

switch 表达式{

        case 值1,值2,。。。

                语句块

        case 值3,值4,。。。

                语句块

        

        default

                语句块

}

	switch num / 10 {
	case 10, 9:
		fmt.Println("成绩等级为A")
	case 8:
		fmt.Println("成绩等级为B")
	case 7:
		fmt.Println("成绩等级为C")
	case 6:
		fmt.Println("成绩等级为D")
	default:
		fmt.Println("成绩等级为E")
	}

1.switch后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)

2.case后面的值如果是常量值(字面量),则要求不能重复

3.case后的各个值的数据类型,必须和 switch 的表达式数据类型一致

4.case后面可以带多个值,使用逗号间隔。比如 case 值1,值2...

5.case后面不需要带break 

6.default语句不是必须的,位置也是随意的。

7.switch后也可以不带表达式,当做if分支来使用

8.switch后也可以直接声明/定义一个变量,分号结束,不推荐

9.switch穿透,利用fallthrough关键字,如果在case语句块后增加fallthrough ,则会继续执行下一个case,也叫switch穿透。

for

for 初始表达式;布尔表达式(条件判断);迭代因子{

        循环体(重复执行的语句)

}
1、初始表达式不可用var定义,要用:=

2、for循环无法提高底层效率,只能让程序员写代码变得更加整洁

3、条件不满足时终止,条件满足时输出

package main

import "fmt"

func main() {
	//实现功能,求和1+2+3+   +100
	var sum int = 0
	for i := 1; i <= 100; i++ {
		sum += i
		//i++
	}

	fmt.Println(sum)
}

格式灵活,在控制台中结束死循环ctrl+c

for range结构是Go语言特有的迭代结构 

for range可以遍历数组、切片、字符串、map及通道,形式为:

for key,val := range coll{

}

//Printf : 可打印出格式化的字符串,Println不行;
package main

import "fmt"

func main() {
	var str string = "Hello golong"

	//普通for循环
	// for i := 0; i < len(str); i++ {
	// 	fmt.Println(str[i])
	// }

	for i := 0; i < len(str); i++ { //i:理解为字符串的下标
		fmt.Printf("%c \n", str[i])
	}

}
}

Printf : 可打印出格式化的字符串,Println不行;

 关键字

break

1、在switch分支中,每个case分支后都用break结束分支,但是在go语言中break可以省略不写

2、break可以用来结束正在执行的循环,其作用为结束离它最近的循环

package main

import "fmt"

func main() {
	for i := 1; i <= 5; i++ {
		for j := 2; j <= 4; j++ { //循环到j=4
			//fmt.Println("i: ", i, "j: ", j)
			fmt.Printf("i: %v , j: %v \n", i, j)
			if i == 2 && j == 2 {
				break
			} //当i=2,j=2时跳出离他最近的循环
		} //跳出的就是这个循环
	}
}
//输出结果
// i: 1 , j: 2 
// i: 1 , j: 3 
// i: 1 , j: 4 //j=4时结束j循环,再次进入i循环(仅为个人理解,可能表达不当)
// i: 2 , j: 2 //因为i=2,j=2时跳出了包含j++的for循环,直接进入i++的循环,所以下一个为i=3,j=2
// i: 3 , j: 2 
// i: 3 , j: 3 
// i: 3 , j: 4 
// i: 4 , j: 2 
// i: 4 , j: 3 
// i: 4 , j: 4 
// i: 5 , j: 2 
// i: 5 , j: 3 
// i: 5 , j: 4

label 标签

package main

import "fmt"

func main() {
	//双重循环:
	label2://在此处设计一个标签的话会从if语句直接跳出所有循环,输出ok
	for i := 1; i <= 5; i++ {
	//label2:
		for j := 2; j <= 4; j++ {
			fmt.Printf("i: %v, j: %v \n", i, j)
			if i == 2 && j == 2 {
				break label2 //结束指定标签对应的循环
			}
		}
	}
	fmt.Println("-----ok")
}
//设计label可以用于break label直接跳出多个循环,在某些情况下会让问题变得更加简单

continue 结束本次循环进入下一次循环

package main

import "fmt"

//输出1-100之间可以整除6的数
func main() {
	for i := 1; i <= 100; i++ {
		if i%6 != 0 {
			continue //continue可以结束本次循环直接进入下一次循环
			//在本题中,如果i的值不能整除6,则不用输出i的值直接进入下一次循环
            //continue在英文中可以翻译为中断后再继续
		}
		fmt.Println(i)
	}
}
package main

import "fmt"

func main() {
	for i := 1; i <= 4; i++ {
		for j := 2; j <= 4; j++ {
			if i == 2 && j == 2 {
				continue
			}//i=2,j=2时结束了离他最近的循环,因此没有输出i=2,j=2
			fmt.Printf("i: %v , j: %v\n", i, j)
		}
	}
}
package main

import "fmt"

	label:
	for i := 1; i <= 4; i++ {
		for j := 2; j <= 4; j++ {
			if i == 2 && j == 2 {
				continue label
				//终止本次循环,跳回到label
			}//i=2,j=2时终止了两层循环,因此没有输出i=2,j=2
			//进入新的循环后输出i=3,j=2
			fmt.Printf("i: %v , j: %v\n", i, j)
		}
	}
	fmt.Println("------ok")
}

goto语句

1、在go语言中,goto语句可以无条件的转移代程序中的指定行

2、goto语句通常与条件语句配合使用。可以用来实现条件转移

3、在go程序中不建议使用goto语句,以免造成程序流程的混乱

package main

import "fmt"

func main() {
	fmt.Println("hello golang1")
	fmt.Println("hello golang2")
	if 1 == 1 {
		goto label1 //goto一般配合条件结构一起使用
	}
	fmt.Println("hello golang3")
	fmt.Println("hello golang4")
	fmt.Println("hello golang5")
	fmt.Println("hello golang6")
label1:
	fmt.Println("hello golang7")
	fmt.Println("hello golang8")
	fmt.Println("hello golang9")
}

// 输出为:
// hello golang1
// hello golang2
// hello golang7
// hello golang8
// hello golang9

return 结束当前函数

package main

import "fmt"

//输出1-100中小于等于14的数,并在末尾输出hello golang

func main() {
	for i := 1; i <= 100; i++ {
		fmt.Println(i)
		if i == 14 {
			return //结束当前的函数
		}
	}
	fmt.Println("hello golang")
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值