Go語言語法要素與代碼規范
1 Go語言語法要素與代碼規范
Go 語言的語法有兩個主要特點:簡約與嚴謹。Go 語言是一門比較講究代碼書寫規范的語言,在代碼格式和內容上都有一定的要求,有些地方甚至達到了嚴苛的程度。這是因為 Go 語言的設計者希望能夠通過規范代碼的編寫,減少出現錯誤的可能性,並使代碼更加高效。
舉例來說,類似下面一段代碼中花括號的用法,這個在 C、C++ 等常見的語言中是完全沒有問題的,但是在 Go 語言中會出現編譯錯誤:
for i :=1; i < 10; i++
{
fmt.Println(i)
}
這是因為,Go 語言要求括起循環體代碼的一對花括號的前一個必須跟在 for 語句同一行的條件表達式之后。因此,Go 語言中這段代碼的正確格式,如下:
for i :=1; i < 10; i++ {
fmt.Println(i)
}
1.1 文件和字符串編碼
Go 語言代碼文件應該要是 UTF-8 編碼的純文本格式的文件。
1.2 語句、代碼塊與執行順序
Go 語言代碼與其他語言代碼類型,都由一條一條的語句(statement)組成。代碼執行的順序一般是從上往下,出現循環或條件分支的情況則按其要求的順序執行。我們可以將幾條語句用花括號括起來成為一個代碼塊,這些語句被全部執行完畢才會繼續往下執行。代碼塊也經常被稱為嵌套代碼,嵌套代碼內部也是按照從上往下的順序執行的。
嵌套代碼常用於在循環體中表示循環體以及條件判斷分支中表示分支、例如下面的代碼是 Go 語言中 for 循環的基本寫法:
for i :=1; i < 10; i++ {
a := i+1
fmt.Println(a)
}
花括號中的兩條語句合起來成為一個嵌套代碼(代碼塊),在循環語句中這個嵌套代碼可以稱為 “循環體”,會被循環執行 10 遍。每一遍都會按上下順序先執行 a:=i+1,再執行 fmt.Println(a) 這一句。
1.3 語句分隔
Go 語言代碼中,語句后一般不需要帶有表示分隔的分號 “;”,而直接用換行符來分隔。這點與 C、C++、Java 等語言都有所不同,也算是一個優勢所在。但是在少數情況下還是不可避免需要用到分號,例如在 for 循環語句中:
package main
import "fmt"
func main() {
for i := 1; i < 10; i++ {
fmt.Println(i)
}
}
上面的 for 循環代碼段中,for 后面的三項語句或表達式之間,仍然需要分號分隔。
1.4 語法記號
Go 語言中,每條語句是由:
-
- 語法記號(token)
或
-
- 語法實體(entity)
組成的。語法記號之間至少由一個空白字符分隔開來,空白字符包括空格、tab分隔符等。
語法記號主要包括 4 類:
- 標識符(identifier)
- 關鍵字(keyword)
- 操作符或標點符號(operator or punctuation)
- 數值量(literal)
1、標識符與預定義標識符
標識符包括類型名、變量名和函數名等,標識符一般由字母和數字組成並且必須由一個字母開始;所有標識符(包括類型名、變量名、函數名等)均區分大小寫。
大小寫不同的標識符代表不同的實體。例如,變量Abc 與 變量abc 或 aBc 在 Go 語言中會被認為是不同的變量。
在 Go 語言中,還有一些標識符已經預定義(predefined),我們可以直接使用,例如定義變量類型時用到的 int、float64、string、bool 都屬於預定義標識符;布爾類型的兩個取值 true 和false 也是預定義標識符;make 等內置函數的名字也屬於預定義標識符。注意,不要再次定義這些預定義的標識符,即不要用這些標識符作為變量、函數等的名字。
2、關鍵字
Go 語言中的關鍵字(保留字)同其他大多數計算機語言一樣,都被保留下來作為 Go 語言中表達特殊語法含義之用,不能被用作其他用途,在代碼中定義類型名、變量名、函數名等標識符的時候要避免使用這些關鍵字。Go 語言中的關鍵字相對比較少,如下所示:
break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var
3、操作符和標點符號
操作符和標點符號是 Go 語言中用於組成表達式或者輔助表示一些語法含義的字符。
加減乘除等運算符都屬於操作符,條件判斷用到的大於號、小於號等也屬於操作符;而用於包含嵌套代碼塊的花括號、用於表達式中表示優先運算關系的圓括號則屬於標點符號。Go 語言中主要用到的操作符和標點符號如下所示。
+ & += &= && == != ( ) - | -= |= || < <= [ ] * ^ *= ^= >= { } / << /= <<= ++ = := , ; % >> %= >>= -- ! ... . : &^ &^=
4、數值量
數值量是在 Go 語言中對各種數值的表達形式,這里的數值除了指數字外,也包括字符串值和布爾類型的值等。
例如,在 Go 語言中表達一個數值可以用下面的方式書寫:
123 #代表一個整數 0xFFACDE #0x開頭的十六進制數字用於表達一個整數 32.8 #代表一個浮點數(小數) 6.68e-11 #達標一個用科學記數法表示的浮點數 88.3528e-11i #.表示一個數學上的復數、前面是實部,后面是虛部 "Hello world!" #字符串的表達形式 `Hello world!` #反引號`也可以用來擴起字符串
5、標識符的可見性
Go 語言中,以小寫字母開始的所有標識符均只能在代碼所在的包中使用,如果要提供給外部其他包(包括主程序所在的 main 包)使用,則應該以大寫字母開頭,這些標識符稱作 “被導出的”(exported)標識符。
