04-golang流程控制

流程控制是编程语言非常重要的部分。一般在我们的业务代码中,if/else,for循环等流程控制代码是使用频率非常高的。

golang中比较常用的流程控制有以下几种:if\elsefor循环for range迭代switch选择goto代码跳转breakcontinue

1、if\else(分支结构)

golang中使用if\else来做条件判断。

基本语法
if 表达式1 {
	分支结构2
} else if 表达式2 {
	分支结构2
} else {
	分支结构3
}

这是if\else语句的基本格式。每个条件表达式的值必须为布尔(bool)型,程序从上往下走,当表达式的值为true,则执行该分支中的代码,该分支中执行完后,则跳出if\else,后续分支结构不在判断和执行。当表达式的值为false时,则跳过当前分支,往下继续判断,直到某个分支表达式为true或者走到else分支,然后执行该分支中代码,结束流程。

简单示例
func main() {
 	scope := 90
    if scope > 90 {
		fmt.Println("scope > 90")
	} else if scope < 80 {
		fmt.Println("scope < 80")
	} else {
		fmt.Println("scope = 90")
	}
}

// 打印scope = 90
if条件判断的特殊写法

if语句后面还可以带一条简单的初始化语句,该语句声明的变量的作用域是整个if\else流程。

func main() {
    if scope := 90 ; scope > 90 {
		fmt.Println("scope > 90")
	} else if scope < 80 {
		fmt.Println("scope < 80")
	} else {
		fmt.Println("scope = 90")
	}
}

// 打印scope = 90

2、for循环

golang中for用来循环执行语句。

基本语法
for 初始语句; 条件表达式; 结束语句 {
	循环语句
}

初始语句一般用来定义条件表达式中所需要的变量。条件表达式是循环是否执行的判断依据,条件表达式为true时则执行不断循环语句,条件为false时则退出循环。结束语句是执行一次循环后做的操作。

简单示例
func main() {
	for i := 0; i < 5; i++ {
		fmt.Println(i)
	}
}

// 换行打印 1 2 3 4 5

for循环的初始语句可以被省略,但是后面的;不能省略

简单示例
func main() {
	i := 0
	for ; i < 5; i++ {
		fmt.Println(i)
	}
}

for循环的初始语句和结束语句都可以被省略,并且初始语句和条件表达式后的;也可以被省略。这样就类型与java中的while循环

简单示例
func main() {
	i := 0
	for i < 5 {
		fmt.Println(i)
		i++
	}
}

如果不给for循环设置条件表达式,则for循环为无限循环

简单示例
func main() {
	for {
		fmt.Println("无限循环")
	}
}

3、for range迭代循环

for range是golang中的迭代循环结构,用来迭代遍历任何一种集合(数组、切片等),也可以遍历字符串。

基本语法
	for i, val := range 集合 {
		
	}

for range迭代每次会返回一个或两个值,每个返回值的含义不是固定的,迭代不同的类型集合,返回值的意义各不相同。

  • 迭代字符串,数组,切片:第一个返回值为索引,第二个返回值为对应的值
  • 迭代map:第一个返回值为key,第二个返回值为value
  • 迭代通道:只返回一个值,为通道内的值
注意事项

for range迭代返回的val是集合中值的拷贝副本,对它的修改不会影响到集合中的值。

4、switch选择结构

基本语法
	switch value {
	case var1:
		...
	case var2, var3:
		...
	default: 
         ...
	}

变量value可以为任意一种类型,而var1,var2,var3必须是相同类型的值。每个case分支必须是唯一,当某个分支成功匹配后,执行相应代码,然后跳出整个switch语句块。若case分支均不匹配,则执行default分支代码。当然如果我们想在分支匹配后继续执行switch语句块,则可以使用关键字fallthrough,匹配分支后的每个case分支(default分支不会执行)都会执行一遍。

简单示例
func main() {
	var s int32 = 10
	switch s {
	case 1:
		fmt.Println("1")
	case 2:
		fmt.Println("2")
	case 10:
		fmt.Println("10")
		fallthrough
	case 11:
		fmt.Println("11")
	default:
		fmt.Println("default")
	}
}
// 10 11 

5、break和continue

break关键字用来跳出当前循环(只能跳出一层)或者跳出整个switch语句块。

简单示例
func main() {
func main() {
	var s int32 = 10
	switch s {
	case 1:
		fmt.Println("1")
	case 2:
		fmt.Println("2")
	case 10:
		fmt.Println("10")
		fallthrough
	case 11:
		fmt.Println("11")
		break
	case 12:
		fmt.Println("12")
	default:
		fmt.Println("default")
	}
	// 10 11

	for i := 0; i < 3; i++ {
		for j := 0; j < 10; j++ {
			if j > 5 {
				break
			}
			print(j)
		}
		print(" ")
	}
    // 012345 012345 012345
}

continue关键字用来忽略当前剩余的循环语句(或者说本次循环剩余的语句不继续执行),进入下一次循环。

简单示例
func main() {
	for i := 0; i < 10; i++ {
		if i == 5 {
			continue
		}
		print(i)
		print(" ")
	}
}

6、goto

goto是跳转语句,通常它与标签结合使用。goto 标签,这样就是程序跳转到标签的位置。

简单示例
func main() {
   goto flag
   fmt.Println("B")
flag:
   fmt.Println("A")
}

// 打印 A

需要注意的是,goto与标签之间不能定义新的变量,否则编译通过不了。还有goto这东西能不用就不要用,使用goto使代码的可读性和可维护性变差。记得当初某次课设时,老师直接说了,谁用goto直接挂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值