第二章 程式結構
基礎知識結構
- 命名
- 宣告
- 變數
- 賦值
- 型別
- 包和檔案
- 作用域
命名
命名規則:一個名字必須以一個字母(unicode字母)或者下劃線開頭,後面可以跟任意數量的字母數字或者下劃線。區分大小寫。
go的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 ;
內建常量與內建函式如下
常量:true ;false;iota; nil
內建型別:int;int8; int16int32int 64
uint uint8uint16uint32uint64uintptr
float32 float64 complex128complex64
bool type rune stringerror
內建函式 : makelencapnewappendcopyclosedelete
complex real imag
panic recover
golang推薦駝峰式命名同時預設規定 首字母大寫的變數可以包外引用,首字母小些的變數 只能包內呼叫(漢字變數目前為止首字母被認定為小寫)
宣告
宣告語句定義了程式的各種實體物件以及部分或全部的屬性。 golang 中只要有四種類型的宣告語句 : var const type func 分別對應 變數宣告,常量宣告,型別宣告和函式宣告。
宣告一個量之後如果直接呼叫預設會返回改變數型別的零值。
變數
- new函式,使用new(T)函式會建立一個型別為T的零值變數,並返回其實體地址;
-
變數的生命週期
變數的生命週期指的是在程式執行期間變數有效存在的時間間隔。 對於在包一級宣告的變數來說,它們的生命週期和整個程式的執行週期一致。而相對的,在區域性變數的生命週期是動態的:從每次建立一個新變數的生命語句開始,直到該變數不再被引用為止,然後變數的儲存空間可能被回收
-
go的垃圾回收機制基礎理解(實現思路):
從每個包級的變數和每個當前執行函式的每一個區域性變數開始,通過指標或者應用的訪問路徑遍歷,是否可以找到該變數。如果不存在這樣的訪問路徑。那麼說明該變數是不可達的,也就是說它是否存在不會影響程式的後續運算結果。(該結果的選擇不是由VAR或者new宣告方式決定的。)
賦值
普通的賦值 略
元組賦值
允許更新多個變數,這裡之所以把元組賦值單獨提出來,是因為golang有基礎錯誤與成功與否的判斷機制,就是單函式擁有多個返回值用於判斷是否有錯誤與是否成功例子:
f,err = os.Open("fileName") v.ok = x.(T) _,ok = m[key]//判斷map中是否有這個值 //等等
型別
golang允許自定義型別 所以兩個變數判斷相當的條件為值相同同時型別也相同;型別和型別之間存在轉換,轉換後的值比較更具操作性;
包和函式
主要注意事項為 引入順序是有編譯器的順序決定的,並不是由匯入順序決定的。
作用域
一個程式可以包含多個同名的宣告只要作用域不相同是可以正常編譯執行的,不過因為這樣會導致程式碼理解出現誤差。
作用域的主要理解如果按照書上所說是好大一段,個人理解為,大部分作用域的範圍為其生命的程式碼塊,除了逃逸變數與包可匯出變數,這些變數的作用域可以擴大到他們的引入程式碼塊。另外操作塊的宣告變數只生存於子操作塊,這裡主要是指 if forswitch塊。