go的基本知識

本文記錄了在使用go語言當中遇到的基本知識點,對於最簡單的初級語法再也不羅列c++

  1. 駝峯命名法首字母大小寫對應不一樣訪問權限:golang使用駝峯命名法,這個是基礎知識。但須要注意的是golang中根據首字母的大小寫來肯定能夠訪問的權限。不管是方法名、常量、變量名仍是結構體的名稱,若是首字母大寫,則能夠被其餘的包訪問;若是首字母小寫,則只能在本包中使用。這一點是我一開始沒有注意到的。
  2. unsafe.Pointer & uintptr: golang裏面 unsafe.Pointer()有些相似於void*,能夠被轉換成其餘類型的指針且持有指針所指向的對象;uintptr是內置類型,本質上是一種整形,能夠用來存儲指針,可是它並不持有指針所指,也就是說其指向物會被GC.
  3. new&make, new只負責分配內存,並將內存初始化爲0;make經常使用於 slice,map,channel的初始化。

    a. new返回的是一個指針,而make返回的是一個已經初始化過的對象的引用;golang

  4. 結合new&make講一下slice:數據結構

    實際上golang是有array和slice兩種數據結構的,並且array是slice的基礎。其結構以下:app

    

type slice struct {
    array unsafe.Pointer
    len   int
    cap   int
}

  當使用相似於:var slice = new([10]int) 的時候,咱們實際上聲明瞭一個array,它的類型是[10]int,這個10是類型的一部分。因此它是沒辦法append的,也就是它的長度是固定的。而對於開發人員來講,確定但願有一個可擴展的array供咱們使用,這就產生了所謂的slice。若是瞭解c++的vector,確定以爲二者在思路上是差很少的,都是預先申請較多的空間並在適當的時候進行擴展。只不過這裏的slice使用append函數進行了顯式的管理。因此slice其實是有兩個屬性的,length,capacity, 使用 make([]int,10,100) 來進行初始化。函數

相關文章
相關標籤/搜索