人們將程序定義爲數據結構+算法,而算法的實現通常都是靠程序控制來完成,因此,程序控制對於程序來說,是非常重要的部分。接下來我們來通過本文來了解下Go爲我們提供的程序控制。
1、條件語句
關鍵字:if、else、else if
if i := 0; x == i { //註釋1
return 0
} else if x == 1 { //註釋2
return 1
} else {
return -1
}
註釋1:這裏可以自定義局部變量,作用域爲這個if-else體結束。
註釋2:if塊不定義局部變量時與這種寫法類似,如果這裏也定義局部變量,則註釋1處的
if語句塊無法引用到這裏定義的變量,else語句塊可以引用。
切記:不需要()來包圍條件語句,{}爲必須的,且必須與關鍵字同行
2、選擇語句
關鍵字:switch、case、fallthrough
switch i { //註釋1
case 0: //註釋2
fmt.Printf("0")
case 1: //註釋3
fallthrough
case 2, 3: //註釋4
fmt.Printf("2,3,4")
default: //註釋5
fmt.Printf("Default")
}
注釋1:{須與switch同行,這裏可以有一個初始化表達式,右側需要跟分號
注釋2:不需要明確的break來退出,默認自動退出
注釋3:當i=1時輸出2,3,fallthrough關鍵字會繼續執行緊跟的下一個case代碼
注釋4:可以一個case中寫多個滿足條件(i爲2,3中的一個即可)
注釋5:以上的都不匹配時執行
switch後面的表達式不是必需的,這種結構與多個if...else if的邏輯作用等同
switch { //註釋1
case 0 == i:
fmt.Printf("0")
case 1 == i:
fallthrough
case 2 == i || 3 == i:
fmt.Printf("2,3,4")
default:
fmt.Printf("Default")
}
註釋1:{這裏可以有一個初始化表達式,右側需要跟分號,如本行可寫爲switch i := 0; {
3、循環語句
關鍵字:for、range、break、continue
1)for語句的多種格式
格式1:
sum := 0
for i := 0; i < 10; i++ { //註釋1
sum += i
}
註釋1:不需要()來包圍條件語句,{}爲必須有的,且{必須與關鍵字同行
格式2:
i, sum := 0, 0
for { //註釋1
if i == 10 {
break
}
sum += i
i++
}
註釋1:類似於Java中的while(true)寫法
格式3:
i, sum := 0, 0
for i < 10 {
sum += i
i++
}
2)數組或切片(後面講解)的兩種遍歷方式
寫法1:
mySlice := []int{1, 2, 3, 4} //註釋1
sum := 0
for i, l := 0, len(mySlice); i < l; i++ { //註釋2
sum += mySlice[i]
}
註釋1:定義一個slice
註釋2:賦值語句支持多重賦值(僅支持平行多重賦值)
寫法2:
for i, v := range mySlice { //註釋1
sum += v //註釋2
//sum +=mySlice[i]
}
註釋1:range有兩個返回值,i爲索引,v爲值。當對map(後面講解)進行遍歷時,range的返回值分別爲key,value
註釋2:這裏要注意i沒有使用,編譯錯誤,請使用_代替
4、跳轉語句
關鍵字:goto,其實break及continue也有跳轉的功能
三個語法都可以配合標籤使用,標籤區分大小寫
goto 標籤名:調整程序執行位置,標籤可以在語句之後定義
break 標籤名:結束與標籤同級的for循環,標籤必須在語句之前定義
continue 標籤名:結束與標籤同級的for循環,標籤必須在語句之前定義
Label1: //定義名爲"Label1"的標籤
for { //無限循環
for i := 0; i < 10; i++ {
if i > 3 {
break Label1 //直接結束Label1同級的for
}
}
}
goto、continue的使用大體類似
一路過來,我們發現其實Go是一門非常簡單的語言,有其它編程語言基礎同學看完這幾篇博文觸類旁通的就懂了,僅僅寫法上的差異,別急,後面的文章將會介紹些Go比較獨有的特性。
無聞(unknow)《Go編程基礎》
許式偉的 《Go語言編程》