1. 程式人生 > >讀書筆記之《Go程式設計語言》---第二章 程式結構

讀書筆記之《Go程式設計語言》---第二章 程式結構

名稱
知識點:

  • go中函式、變數、常量、型別、語句標籤和包的名稱遵循一個簡單規則:名稱開頭是一個字母或下劃線
  • go中的25個關鍵字
    在這裡插入圖片描述
  • 三十幾個內建預宣告的常量
    在這裡插入圖片描述
  • 實體第一個字母決定其可見性是否跨包,大寫開頭的是可匯出的,小寫開頭是不可匯出的
  • 單詞組合命名使用“駝峰式”,首字母縮寫詞通常使用相同的大小寫

宣告
知識點:

  • 4個主要的宣告:變數(var)、常量(const)、型別(type)、函式(func)
  • 每一個.go檔案已package宣告開頭,表明檔案屬於哪個包,隨後是import宣告,然後是包級別的型別、變數、常量和函式的宣告,
  • 變數宣告通用形式:var name type = expression,type和expression部分可以省略,但不能都省略。
  • 短變數宣告,name := expression,短變數宣告不需要宣告所有在左邊的變數,如果一些變數在同一個詞法塊中已經聲明瞭,那麼對於這些變數等同於賦值操作

指標
知識點:

  • 變數宣告 var x int,則表示式 p := &x(x的地址)獲得一個指向該變數的指標p,而*p獲得變數的值
  • 指標型別的零值是nil,只有兩個指標指向同一個變數,或都是nil時才相等

new 函式
知識點:

  • new(T)表示式為建立一個未命名的T型別變數
  • new建立的變臉和取其地址的普通區域性變數相同,只是不需要引入一個虛擬的名字。

變數的生命週期
知識點:

  • 生命週期指程式執行過程中變數存在的時間段,包級別變數的生命週期是整個程式的執行時間
    在這裡插入圖片描述
  • x一定使用堆空間,在函式f返回後還可以從global變數訪問,x從f中逃逸
  • 長生命週期物件中保持短生命週期物件不必要的指標,會阻止垃圾回收器回收短生命週期的物件空間

賦值
知識點:

  • 多重賦值:
    在這裡插入圖片描述
  • 當一個賦值語句使用函式呼叫時,左邊的變數個數需要和函式返回值一樣多
  • 賦值語句是顯示賦值,程式中還有很多隱式賦值,如函式呼叫傳參,return語句
  • 任何比較中,第一個運算元相對於第二個運算元的型別必須是可賦值的

型別宣告
知識點:

  • type宣告定義一個新的命名型別,它和某個已有型別使用相同底層型別,語法: type name underlying-type
  • 對於每個型別T,都有一個對應的型別轉換操作T(x)將x轉換為型別T,如果兩個型別具有相同的底層型別或二者都是指向相同底層型別變數的未命名指標型別,則二者是可以相互轉換的
  • 命名型別的底層型別決定了它的結構和表達方式,以及它支援的內部操作集合
  • 不同命名型別即使有相同的底層型別也不能直接比較,

包和檔案
知識點:

  • go語言中包的作用和其他語言中的庫或模組的作用類似,用於支援模組化、封裝、編譯隔離和重用
  • 包匯入的路徑就是包所在目錄名的尾部
  • 每一個包給它的宣告提供獨立的名稱空間
  • 從包外部引用包內函式必須提供明確修飾符來指明是哪個包的函式,例如image.Decode和utf16.Decode
  • 一個匯入路徑標註一個目錄,目錄中包含構成包的一個或多個Go原始檔。包名匹配匯入路徑的最後一段
  • 匯入宣告可以設定一個可選的名字來避免衝突
  • 如果匯入一個沒有被引用的包,就會觸發一個錯誤

包初始化
知識點:

  • 包初始化從初始化包級別的變數開始,這些變數按照宣告順序初始化,在依賴已解析完畢的情況下,根據依賴順序進行,如果包由多個.go檔案組成,初始化按照編譯器收到檔案的順序進行,包的初始化按照程式中的匯入的順序進行,依賴順序優先,每次初始化一個包。

作用域
知識點:

  • 宣告的作用域是指能夠用到所宣告的欄位的原始碼段
  • 語法塊是由大括號圍起來的一個語句序列
  • 包括語法塊在內,所有宣告程式碼統稱為詞法塊
  • 一個程式中的不同詞法塊中可以包含多個宣告,