Go有指針,而後卻沒有指針運算,目標是修改一個傳入函數的參數的值得效率和可能性,所以它們更像是引用而不是C的指針。數組
Go有兩個內存分配原語,make和new。函數
new(T)分配了零值填充的T類型的內存空間,而且返回其地址,一個*T類型的值。用Go的術語說,它返回了一個指針,指向新分配的類型T的零值。指針
make(T, args)只能建立slice, map和channel,而且返回一個有初始值(非零)的T類型,而不是*T。內存
例如文檔
make([]int, 10, 100)分配了100個整數的值,而後用長度10和容量100建立了slice結構指向數組的前10個元素。編譯器
new([]int)返回指向新分配的內存的指針,而零值填充的slice結構指向nil的slice值。編譯
有時候零值不能知足需求,必需要有一個用於初始化的構造函數,能夠經過複合聲明實現。
從複合聲明中獲取地址,意味着告訴編譯器在堆中分配空間,而不是棧中。效率
Go容許定義新德類型,經過關鍵字type實現,例如type foo int。
建立更復雜的類型須要用到struct關鍵字。構造函數
type類型的轉換。map
文檔里居然沒寫完。