Go開發(fā)工程師
未來3-5年企業(yè)高性能項(xiàng)目不可替代的語言,從基礎(chǔ)到項(xiàng)目實(shí)戰(zhàn)再到重構(gòu),真正從入門到精通
Go語言的流程控制主要包括條件分支、循環(huán)和并發(fā)。在本章,我們先來談?wù)劵镜牧鞒炭刂普Z句。具體到本小節(jié),我們將提及if
語句。
if
語句一般會(huì)由關(guān)鍵字if
、條件表達(dá)式和由花括號(hào)包裹的代碼塊組成。所謂代碼塊,即是包含了若干表達(dá)式和語句的序列。在Go語言中,代碼塊必須由花括號(hào)包裹。另外,這里的條件表達(dá)式是指其結(jié)果類型是bool
的表達(dá)式。一條最簡(jiǎn)單的if
語句可以是:
if 100 > number { number += 3 }
這里的標(biāo)識(shí)符number
可以代表一個(gè)int
類型的值。這條if
語句的意思是:如果number
的值小于100
,那么就把其值增加3
。我還可以在此之上添加else
分支,就像這樣:
if 100 > number { number += 3 } else { number -= 2 }
else
分支的含義是,提供在條件不成立(具體到這里是number
的值不小于100
)的情況下需要執(zhí)行的操作。除此之外,if
語句還支持串聯(lián)。請(qǐng)看下面的例子:
if 100 > number { number += 3 } else if 100 < number { number -= 2 } else { fmt.Println("OK!") }
可以看到,上述代碼很像是把多條if
語句串接在一起了一樣。這樣的if
語句用于對(duì)多個(gè)條件的綜合判斷。上述語句的意思是,若number
的值小于100
則將其加3
,若number
的值大于100
則將其減2
,若number
的值等于100
則打印OK!
。
注意,我們至此還未對(duì)number
變量進(jìn)行聲明。上面的示例也因此不能通過編譯。我們當(dāng)然可以用單獨(dú)的語句來聲明該變量并為它賦值。但是我們也可以把這樣的變量賦值直接加入到if
子句中。示例如下:
if number := 4; 100 > number { number += 3 } else if 100 < number { number -= 2 } else { fmt.Println("OK!") }
這里的number := 4
被叫做if
語句的初始化子句。它應(yīng)被放置在if
關(guān)鍵字和條件表達(dá)式之間,并與前者由空格分隔、與后者由英文分號(hào);
分隔。注意,我們?cè)谶@里使用了短變量聲明語句,即:在聲明變量number
的同時(shí)為它賦值。這意味著這里的number
被視為一個(gè)新的變量。它的作用域僅在這條i
語句所代表的代碼塊中。也可以說,變量number
對(duì)于該if
語句之外的代碼來說是不可見的。我們?nèi)粢谠?code class="marker">if語句以外使用number
變量就會(huì)造成編譯錯(cuò)誤。
另外還要注意,即使我們已經(jīng)在這條if
語句所代表的代碼塊之外聲明了number
變量,這里的語句number := 4
也是合法的。請(qǐng)看這個(gè)例子:
var number int if number := 4; 100 > number { number += 3 } else if 100 < number { number -= 2 } else { fmt.Println("OK!") }
這種寫法有一個(gè)專有名詞,叫做:標(biāo)識(shí)符的重聲明。實(shí)際上,只要對(duì)同一個(gè)標(biāo)識(shí)符的兩次聲明各自所在的代碼塊之間存在包含的關(guān)系,就會(huì)形成對(duì)該標(biāo)識(shí)符的重聲明。具體到這里,第一次聲明的number
變量所在的是該if
語句的外層代碼塊,而number := 4
所聲明的number
變量所在的是該if
語句的代表代碼塊。它們之間存在包含關(guān)系。因此對(duì)number
的重聲明就形成了。
這種情況造成的結(jié)果就是,if
語句內(nèi)部對(duì)number
的訪問和賦值都只會(huì)涉及到第二次聲明的那個(gè)number
變量。這種現(xiàn)象也被叫做標(biāo)識(shí)符的遮蔽。上述代碼被執(zhí)行完畢之后,第二次聲明的number
變量的值會(huì)是7
,而第一次聲明的number
變量的值仍會(huì)是0
。
請(qǐng)?jiān)诿钤创a文件index.go的第 8 行處添加一條語句,使該文件被執(zhí)行之后在標(biāo)準(zhǔn)輸出上會(huì)打印出39
。
這條語句可以是var number int
。這使得在if
語句的第一個(gè)條件分支中存在了對(duì)number
變量的重聲明。因而語句number += 3
的執(zhí)行改變的只是第二次聲明的number
變量的值。其值會(huì)由0
變?yōu)?code class="marker">3。另一方面,在if
語句開始處的那條初始化子句并沒有對(duì)外層的number
變量進(jìn)行重聲明,而只是把它的值變成了9
。
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報(bào)