Go語言流程控制語句
1.條件語句
幾個(gè)注意點(diǎn)和C#不一樣的。
if a < 5 {
return 0
} else {
return 1
}① 條件語句不需要使用括號(hào)將條件包含起來 a<5 ,C#必須有()
②無論語句體內(nèi)有幾條語句,花括號(hào){}都是必須存在的;C#如果只有一條語句可以省略{}
③左花括號(hào){必須與if或者else處于同一行 C#的{}是換行的
④在有返回值的函數(shù)中,不允許將“最終的”return語句包含在if...else...結(jié)構(gòu)中,
否則會(huì)編譯失?。ㄟ@句話錯(cuò)誤的 1.1版Go語言和之后的新版已經(jīng)支持if else條件語句直接return返回值。),所以上面的demo是可以編譯通過的。
2.選擇語句
①條件表達(dá)式不限制為常量或者整數(shù)
②單個(gè)case中,可以出現(xiàn)多個(gè)結(jié)果選項(xiàng)
③Go語言不需要用break來明確退出一個(gè)case;C#需要在每一個(gè)case結(jié)束之后加上break
④增加了fallthrough方法 主要用于多個(gè)相同case合并,Go就相當(dāng)于默認(rèn)加了break;
和C#正好相反
switch i {
case 0:
fmt.Printf("0")
case 1:
fmt.Printf("1")
case 2:
fallthrough
case 3:
fmt.Printf("3")
case 4, 5, 6:
fmt.Printf("4, 5, 6")
default:
fmt.Printf("Default")
}如上例子,case 2中有語句fallthrough,那么當(dāng)i=2時(shí)候,執(zhí)行完fallthrough會(huì)執(zhí)行case3,由此打印出了“3”
⑤可以不設(shè)定switch之后的條件表達(dá)式,在此種情況下,整個(gè)switch結(jié)構(gòu)與多個(gè)if...else... 的邏輯作用等同。如下代碼
switch {
case 0 <= Num && Num <= 3:
fmt.Printf("0-3")
case 4 <= Num && Num <= 6:
fmt.Printf("4-6")
case 7 <= Num && Num <= 9:
fmt.Printf("7-9")
}3.循環(huán)語句
Go語言中的循環(huán)語句只支持for關(guān)鍵字,而不支持while和do-while結(jié)構(gòu)。
①for后面的條件表達(dá)式不需要用圓括號(hào)()包含起來
模擬while語句:直接用for后面不加條件
sum := 0
for {
sum++
if sum > 100 {
break
}
}②for循環(huán)中條件表達(dá)式中也支持多重賦值
a := []int{1, 2, 3, 4, 5, 6}
for i, j := 0, len(a) – 1; i < j; i, j = i + 1, j – 1 {
a[i], a[j] = a[j], a[i]
}如上代碼:
a) 初始值 i=0 ,j= len(a) – 1
b)循環(huán)的條件是 i < j
c)每執(zhí)行一次 i+1 ,j-1
循環(huán)體: a[i], a[j] = a[j], a[i]
Go語言中的for循環(huán)與C語言一樣,都允許在循環(huán)條件中定義和初始化變量,唯一的區(qū)別是,Go語言不支持以逗號(hào)為間隔的多個(gè)賦值語句,必須使用平行賦值的方式來初始化多個(gè)變量。
③Go語言的for循環(huán)同樣支持continue和break來控制循環(huán),但是它提供了一個(gè)更高級(jí)的break,可以選擇中斷哪一個(gè)循環(huán), 如下代碼:
break語句終止的是JLoop標(biāo)簽處的外層循環(huán)
for j := 0; j < 5; j++ {
for i := 0; i < 10; i++ {
if i > 5 {
break JLoop
}
fmt.Println(i)
}
}
JLoop: //Do Something如果是C#,只能跳出第一層循環(huán),而不能直接跳出第二層循環(huán),這也是區(qū)別的地方之一
4.跳轉(zhuǎn)語句
Go語言支持goto語句
func myfunc() {
i := 0
HERE:
fmt.Println(i)
i++
if i < 10 {
goto HERE
}
}for…range 是什么,就相當(dāng)于原來的foreach中迭代 k,v結(jié)構(gòu)。
for index, value := range mySlice {
fmt.Println("index: " + index)
fmt.Println("value: " + value)
}當(dāng)?shù)衅瑫r(shí),關(guān)鍵字range 會(huì)返回兩個(gè)值。第一個(gè)值是當(dāng)前迭代到的索引位置,第二個(gè)
值是該位置對(duì)應(yīng)元素值的一份副本

這張圖比較好的說明了range的返回值,重點(diǎn)在于值是副本
到此這篇關(guān)于Go語言流程控制語句的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Golang利用casbin實(shí)現(xiàn)權(quán)限驗(yàn)證詳解
Casbin是一個(gè)強(qiáng)大的、高效的開源訪問控制框架,其權(quán)限管理機(jī)制支持多種訪問控制模型,Casbin只負(fù)責(zé)訪問控制。本文將利用casbin實(shí)現(xiàn)權(quán)限驗(yàn)證功能,需要的可以參考一下2023-02-02
golang搭建靜態(tài)web服務(wù)器的實(shí)現(xiàn)方法
這篇文章主要介紹了golang搭建靜態(tài)web服務(wù)器的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
Go語言實(shí)現(xiàn)IP段范圍校驗(yàn)示例
這篇文章主要介紹了Go語言實(shí)現(xiàn)IP段范圍校驗(yàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Golang設(shè)計(jì)模式之生成器模式講解和代碼示例
生成器是一種創(chuàng)建型設(shè)計(jì)模式,使你能夠分步驟創(chuàng)建復(fù)雜對(duì)象,與其他創(chuàng)建型模式不同,生成器不要求產(chǎn)品擁有通用接口,這使得用相同的創(chuàng)建過程生成不同的產(chǎn)品成為可能,本文就通過代碼示例為大家詳細(xì)介紹Golang生成器模式,感興趣的同學(xué)可以參考下2023-06-06

