22讲通关go-03-03 控制结构:if、for、switch 逻辑语句的那些事儿
03 控制结构:if、for、switch 逻辑语句的那些事儿
在上节课中我留了一个思考题,在一个字符串中查找另外一个字符串是否存在,这个其实是字符串查找的功能,假如我需要在“老马啸西风”这个字符串中查找“老马”,可以这么做:
i:=strings.Index("老马啸西风","老马")
这就是 Go 语言标准库为我们提供的常用函数,以供我们使用,减少开发。
这节课我们继续讲解 Go 语言,今天的内容是:Go 语言代码逻辑的控制。
流程控制语句用于控制程序的执行顺序,这样你的程序就具备了逻辑结构。
一般流程控制语句需要和各种条件结合使用,比如用于条件判断的 if,用于选择的 switch,用于循环的 for 等。
这一节课,我会为你详细介绍,通过示例演示它们的使用方式。
if 条件语句
if 语句是条件语句,它根据布尔值的表达式来决定选择哪个分支执行:如果表达式的值为 true,则 if 分支被执行;
如果表达式的值为 false,则 else 分支被执行。
下面,我们来看一个 if 条件语句示例:
- ch03/main.go
func main() {
i:=10
if i >10 {
fmt.Println("i>10")
} else {
fmt.Println("i10 为 true 的时候,if 分支被执行,否则就执行 else 分支,你自己可以运行这段代码,验证打印结果。
关于 if 条件语句的使用有一些规则:
- if 后面的条件表达式不需要使用 (),这和有些编程语言不一样,也更体现 Go 语言的简洁;
- 每个条件分支(if 或者 else)中的大括号是必须的,哪怕大括号里只有一行代码(如示例);
- if 紧跟的大括号 { 不能独占一行,else 前的大括号 } 也不能独占一行,否则会编译不通过;
- 在 if……else 条件语句中还可以增加多个 else if,增加更多的条件分支。
- ch03/main.go
```go
// 设置为6
i = 6
if i > 10 {
fmt.Println("i>10")
} else if i > 5 && i 10 条件语句之前,通过分号 ; 分隔被初始化的 i:=6。
这个简单语句主要用来在 if 条件判断之前做一些初始化工作,可以发现输出结果是一样的。
通过 if 简单语句声明的变量,只能在整个 if……else if……else 条件语句中使用,比如以上示例中的变量 i。
# switch 选择语句
if 条件语句比较适合分支较少的情况,如果有很多分支的话,选择 switch 会更方便,比如以上示例,使用 switch 改造后的代码如下:
- ch03/main.go
```go
package main
import "fmt"
func main() {
switch i := 6; {
case i > 10:
fmt.Println("i>10")
case i > 5 && i 1 {
case true:
fmt.Println("2>1")
case false:
fmt.Println("21
for 循环语句
当需要计算 1 到 100 的数字之和时,如果用代码将一个个数字加起来,会非常复杂,可读性也不好,这就体现出循环语句的存在价值了。
下面是一个经典的 for 循环示例,从这个示例中,我们可以分析出 for 循环由三部分组成,其中,需要使用两个 ; 分隔,如下所示:
- ch03/main.go
package main
import "fmt"
func main() {
sum := 0
for i := 1; i 100 {
break
}
}
fmt.Println("the sum is", sum)
}
这个示例使用的是没有任何条件的 for 循环,也称为 for 无限循环。此外,使用 break 退出无限循环,条件是 i>100。
总结
这节课主要讲解 if、for 和 switch 这样的控制语句的基本用法,使用它们,你可以更好地控制程序的逻辑结构,达到业务需求的目的。
这节课的思考题是:任意举个例子,练习 for 循环 continue 的使用。
Go 语言提供的控制语句非常强大,本节课我并没有全部介绍,比如 switch 选择语句中的类型选择,for 循环语句中的 for range 等高级能力。
这些高级能力我会在后面的课程中逐一介绍,接下来要讲的集合类型,就会详细地为你演示如何使用 for range 遍历集合,记得来听课!
参考资料
http://learn.lianglianglee.com/专栏/22 讲通关 Go 语言-完/03 控制结构:if、for、switch 逻辑语句的那些事儿.md