GO語言在流程中,添加了
fallthrough
關鍵字。
1. 條件語句
- 條件語句不須要使用括號將條件包含起來
- 不管語句體內有幾條語句,花括號{}都是必須存在的
- 左花括號 { 必須與 if 或者 else 處於同一行
- 在 if 以後,條件語句以前,能夠添加變量初始化語句,使用 ; 間隔
- 在有返回值的函數中,不容許將"最終的"return語句包含在if...else...結構中,不然會編譯失敗。失敗緣由在於,GO函數沒法找到終止該函數的return語句
這裏好像有點問題,本身測試時候按照例子是不會報編譯錯誤的。
通過測試,GO語言也能夠將函數的返回值做爲條件語句
2. 選擇語句
結果以下:
有幾點須要注意:
- 左花括號 { 必須與 switch 處於同一行
- 條件表達式不限制爲常量或者整數
- 單個 case 中,能夠出現多個結果選項
- 與C的規則相反,GO語言不須要用 break 來明確退出一個case
- 只有在case中明確添加 fallthrough 關鍵字,纔會繼續執行緊跟的下一個 case
- 能夠不設定 switch 以後的條件表達式,在此種狀況下,整個switch結構與多個if...else...的邏輯做用相同
switch以後沒有條件表達式。若是傳入的參數都沒有符合case中的條件,就什麼都不作
3. 循環語句
GO的循環語句只支持for循環,不支持while和do-while。
GO還進一步考慮到無限循環的場景,讓開發者不用寫無聊的for(;;){}
直接簡化爲以下寫法:
有幾點須要注意:
- 左花括號 { 必須與for處於同一行
- 容許在循環條件中定義和初始化變量,但GO不支持以逗號爲間隔的多個賦值語句,必須使用平行賦值的方式來初始化多個變量,不能使用i++, j++,須要使用i, j = i+1, j+1
- 也支持continue和break來控制循環,但提供了一個更高級的break,能夠選擇中斷哪個循環
4. 跳轉語句
GO也支持goto關鍵字
函數
GO語言的函數基本組成爲:關鍵字func, 函數名, 參數列表, 返回值, 函數體和返回語句
1. 函數定義
若是若干個相鄰的參數類型的相同,能夠在參數列表中省略前面變量的類型聲明:
func Add(a, b int ) (ret int, err error) {
}
若是返回值列表中多個返回值的類型相同,也能夠用一樣的方式合併
若是函數只有一個返回值,也能夠這麼寫:
func Add(a, b int) int {
}
2. 函數調用
函數調用很是方便,只要事先導入了該函數所在的包,就能夠直接按照以下所示的方式調用函數
import "mymath"
c := mymath.Add(1, 2)
在GO語言中,函數支持多重返回值。利用函數的多重返回值和錯誤處理機制,能夠很容易的寫出優雅美觀的GO代碼。
GO語言中函數名字的大小寫不只僅是風格,更直接體現了該函數的可見性。對於不少注意美感的程序員,這裏的函數名的首字母大寫可能會讓他們感受不太適應,若是你改爲小寫的話,會遇到莫名其妙的編譯錯誤。由於規則:
小寫字母開頭的函數只在本包內可見,大寫字母開頭的函數才能被其餘包使用。這個規則也適用於類型和變量的可見性。
3. 不定參數
最先我碰到的不定參數,就是C的printf函數。合適的使用不定參數,可讓代碼簡單易用,尤爲是輸入輸出函數,好比日誌函數等等。
1) 不定參數類型
不定參數是指函數傳入的參數個數爲不定數量。要作到這一點,首先要將函數定義爲接受不定參數類型:
func myfunc(args ...int){
for _, arg := range args{
fmt.println(arg)
}
}
上述代碼表示函數myfunc()接受不定數量的參數,這些參數的類型都是int,如下都是可使用的調用方式:
myfunc(2, 3, 4)
myfunc(1, 3, 7, 13)
形如 ...type格式的類型只能做爲函數的參數類型存在,而且必須是最後一個參數。它是一個語法糖,即這種語法對語言的功能並無影響,可是更方便程序員使用。使用語法糖可以增長程序的可讀性,從而減小程序出錯的機會。
2) 不定參數的傳遞
3) 任意類型的不定參數
若是你但願傳遞的參數是任意類型,能夠指定類型爲interface()
func Printf(format string, args ...interface{}) {
}
4. 多返回值
GO語言的函數或者成員的方法能夠有多個返回值,這個特性可以使咱們寫出比其餘語言更優雅,更簡潔的代碼。GO語言並不須要強制命名返回值。
若是調用方調用了一個具備多返回值的方法,可是卻並不關心其中的某個返回值,能夠簡單的用一個下劃線 "_"來跳過這個返回值。好比:
n, _ := f.Read(buf)
5. 匿名函數和閉包
匿名函數是指不須要定義函數名的一種函數實現方式。GO語言支持匿名函數。
在GO裏面,函數能夠像普通變量同樣被傳遞或使用。
匿名函數由一個不帶函數名的函數聲明和函數體組成
匿名函數能夠直接賦值給一個變量或者直接執行:
閉包略
6. 錯誤處理
錯誤處理是學習任何編程語言都須要考慮的一個重要話題。在早期語言中,錯誤處理不是語言規範的一部分,一般只做爲一種編程範式的存在。GO語言在此功能上考慮的更爲深遠。漂亮的錯誤處理規範是GO語言最大的亮點之一。
1) error接口
GO語言引入了一個關於錯誤處理的標準模式,即error接口。
type error interface {
Error() string
}
對於大多數函數,若是要返回錯誤,大體上均可以定義爲以下模式,將error做爲多種返回值中的最後一個,但這並不是是強制要求:
調用時的代碼建議按以下方式處理錯誤狀況:
defer() 相似處理當發生異常時要關閉文件的處理方式。