文件名、關鍵字與標識符
- 25 個關鍵字或保留字
| 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 |
- 36 個預定義標識符
| append | bool | byte | cap | close | complex | complex64 | complex128 | uint16 |
|---|---|---|---|---|---|---|---|---|
| append | bool | byte | cap | close | complex | complex64 | complex128 | uint16 |
| copy | false | float32 | float64 | imag | int | int8 | int16 | uint32 |
| int32 | int64 | iota | len | make | new | nil | panic | uint64 |
| println | real | recover | string | true | uint | uint8 | uintptr |
Go 編譯
- 每個 Go 應用程序都包含一個名為 main 的包。
- 每個 Go 文件都屬于且僅屬于一個包。一個包可以由許多以 .go 為擴展名的源文件組成,因此文件名和包名一般來說都是不相同的。
- 如果對一個包進行更改或重新編譯,所有引用了這個包的客戶端程序都必須全部重新編譯。
- 每一段代碼只會被編譯一次
Go 函數(shù)
- 函數(shù)也可以是一個確定的類型,就是以函數(shù)作為返回類型
func FunctionName (a typea, b typeb) typeFunc
- 一個函數(shù)可以擁有多返回值,返回類型之間需要使用逗號分割,并使用小括號 () 將它們括起來,如:
func FunctionName (a typea, b typeb) (t1 type1, t2 type2)
Go 程序的一般結構
- Go 程序的首選結構
- 在完成包的 import 之后,開始對常量、變量和類型的定義或聲明。
- 如果存在 init 函數(shù)的話,則對該函數(shù)進行定義(這是一個特殊的函數(shù),每個含有該函數(shù)的包都會首先執(zhí)行這個函數(shù))。
- 如果當前包是 main 包,則定義 main 函數(shù)。
- 然后定義其余的函數(shù),首先是類型的方法,接著是按照 main 函數(shù)中先后調(diào)用的順序來定義相關函數(shù),如果有很多函數(shù),則可以按照字母順序來進行排序。
- Go 程序的執(zhí)行(程序啟動)順序如下:
- 按順序?qū)胨斜?main 包引用的其它包,然后在每個包中執(zhí)行如下流程:
- 如果該包又導入了其它的包,則從第一步開始遞歸執(zhí)行,但是每個包只會被導入一次。
- 然后以相反的順序在每個包中初始化常量和變量,如果該包含有 init 函數(shù)的話,則調(diào)用該函數(shù)。
- 在完成這一切之后,main 也執(zhí)行同樣的過程,最后調(diào)用 main 函數(shù)開始執(zhí)行程序。
Go 類型轉(zhuǎn)換
在必要以及可行的情況下,一個類型的值可以被轉(zhuǎn)換成另一種類型的值。由于 Go 語言不存在隱式類型轉(zhuǎn)換,因此所有的轉(zhuǎn)換都必須顯式說明,就像調(diào)用一個函數(shù)一樣(類型在這里的作用可以看作是一種函數(shù)):
valueOfTypeB = typeB(valueOfTypeA)
類型 B 的值 = 類型 B(類型 A 的值)
Go 命名規(guī)范
干凈、可讀的代碼和簡潔性是 Go 追求的主要目標。通過 gofmt 來強制實現(xiàn)統(tǒng)一的代碼風格。Go 語言中對象的命名也應該是簡潔且有意義的。像 Java 和 Python 中那樣使用混合著大小寫和下劃線的冗長的名稱會嚴重降低代碼的可讀性。名稱不需要指出自己所屬的包,因為在調(diào)用的時候會使用包名作為限定符。返回某個對象的函數(shù)或方法的名稱一般都是使用名詞,沒有 Get... 之類的字符,如果是用于修改某個對象,則使用 SetName。有必須要的話可以使用大小寫混合的方式,如 MixedCaps 或 mixedCaps,而不是使用下劃線來分割多個名稱。