从零学 Go:Go 语言中的分支和循环控制

690

这是我参与更文挑战的第7天,活动详情查看: 更文挑战

前文回顾

前面的文章主要介绍了 Go 语言中的指针基本概念与相关用法以及常量与别名的基本使用。代码的实现一般有三种结构都是:

  • 顺序结构:代码从上往下依次执行
  • 分支结构:根据不同的条件,执行不同的语句
  • 循环结构: 根据指定的条件,重复执行某段代码。

顺序结构是我们最常见的实现,比较简单,我们在本文来学习 Go 语言的分支和循环结构的用法。

分支和循环控制

Golang 的分支控制与其他语言一致,简单的表达样式如下:

if expression1 {
	branch1
} else if expression2 {
	branch2
} else {
	branch3
}

Golang 中规定与 if 匹配的 { 必须与 if 和表达式位于同一行,否则会发生编译错误。同样的,else 也必须上一个分支的 } 位于同一行。表达式两边可以省略 ()

除了 if 关键值,Golang 中还提供了 switch 语句对大量的值和表达式进行判断。为了避免人为错误,switch 中的每一个 case 都是独立的代码块,不需要通过 break 关键字跳出 switch 选择体,如果需要继续执行接下来的 case 判断,需要添加 fallthrough 关键字对上下两个 case 进行连接。除了支持数值常量,Golang 的 switch 还能对字符串、表达式等复杂情况进行处理。一个简单的例子如下所示:

// 根据人名分配工作
name := "小红"
switch name {
case "小明":
	fmt.Println("扫地")
case "小红":
	fmt.Println("擦黑板")
case "小刚":
	fmt.Println("倒垃圾")
default:
	fmt.Println("没人干活")
}

在上面的代码中,每一个 case 都是字符串样式,且无需通过 break 控制跳出。

如果我们需要在 case 中判断表达式,在这种情况下 switch 后面不再跟判断变量,连判断的目标都没有了,如下例子所示:

// 根据分数判断成绩程度
score := 90
switch  {
case score < 100 && score >= 90:
	fmt.Println("优秀")
case score < 90 && score >= 80:
	fmt.Println("良好")
case score < 80 && score >= 60:
	fmt.Println("及格")
case score < 60 :
	fmt.Println("不及格")
default:
	fmt.Println("分数错误")
}

Golang 的循环体仅提供了 for 关键字,没有其他语言中提供的 while 或者 do-while 形式,基本样式如下:

for init;condition;end{
    循环体代码
}

这其中,初始语句、条件表达式、结束语句都是可缺省的。如果三者都缺省,这将变成一个无限循环语句。可以通过 break 关键字跳出循环体,和使用 continue 关键字继续下一个循环。

小结

本文主要介绍了 Go 基于语法中的分支和循环控制结构。其中涉及到的 If 、Switch 和 for 等关键字,是我们日常编码所常用的。当我们在程序中操作大量同类型变量时,为了方便数据的存储和操作,我们需要借助容器的力量。 下面我们将介绍 Go 中的容器。