Go语言的流程控制主要包括条件分支、循环和并发。在本章,咱们先来谈谈基本的流程控制语句。具体到本小节,咱们将说起if
语句。并发
if
语句通常会由关键字if
、条件表达式和由花括号包裹的代码块组成。所谓代码块,便是包含了若干表达式和语句的序列。在Go语言中,代码块必须由花括号包裹。另外,这里的条件表达式是指其结果类型是bool
的表达式。一条最简单的if
语句能够是:spa
if 100 > number { number += 3 }
这里的标识符number
能够表明一个int
类型的值。这条if
语句的意思是:若是number
的值小于100
,那么就把其值增长3
。我还能够在此之上添加else
分支,就像这样:code
if 100 > number { number += 3 } else { number -= 2 }
else
分支的含义是,提供在条件不成立(具体到这里是number
的值不小于100
)的状况下须要执行的操做。除此以外,if
语句还支持串联。请看下面的例子: 作用域
if 100 > number { number += 3 } else if 100 < number { number -= 2 } else { fmt.Println("OK!") }
能够看到,上述代码很像是把多条if
语句串接在一块儿了同样。这样的if
语句用于对多个条件的综合判断。上述语句的意思是,若number
的值小于100
则将其加3
,若number
的值大于100
则将其减2
,若number
的值等于100
则打印OK!
。
注意,咱们至此还未对number
变量进行声明。上面的示例也所以不能经过编译。咱们固然能够用单独的语句来声明该变量并为它赋值。可是咱们也能够把这样的变量赋值直接加入到if
子句中。示例以下:编译
if number := 4; 100 > number { number += 3 } else if 100 < number { number -= 2 } else { fmt.Println("OK!") }
这里的number := 4
被叫作if
语句的初始化子句。它应被放置在if
关键字和条件表达式之间,并与前者由空格分隔、与后者由英文分号;
分隔。注意,咱们在这里使用了短变量声明语句,即:在声明变量number
的同时为它赋值。这意味着这里的number
被视为一个新的变量。它的做用域仅在这条i
语句所表明的代码块中。也能够说,变量number
对于该if
语句以外的代码来讲是不可见的。咱们若要在该if
语句之外使用number
变量就会形成编译错误。
另外还要注意,即便咱们已经在这条if
语句所表明的代码块以外声明了number
变量,这里的语句number := 4
也是合法的。请看这个例子:变量
var number int if number := 4; 100 > number { number += 3 } else if 100 < number { number -= 2 } else { fmt.Println("OK!") }
这种写法有一个专有名词,叫作:标识符的重声明。实际上,只要对同一个标识符的两次声明各自所在的代码块之间存在包含的关系,就会造成对该标识符的重声明。具体到这里,第一次声明的number
变量所在的是该if
语句的外层代码块,而number := 4
所声明的number
变量所在的是该if
语句的表明代码块。它们之间存在包含关系。所以对number
的重声明就造成了。
这种状况形成的结果就是,if
语句内部对number
的访问和赋值都只会涉及到第二次声明的那个number
变量。这种现象也被叫作标识符的遮蔽。上述代码被执行完毕以后,第二次声明的number
变量的值会是7
,而第一次声明的number
变量的值仍会是0
。循环