把平時的一些筆記放上來,主要是一些比較小的問題,這裏是關於golang中的類型中須要記錄的小知識點。golang
【1】能夠是某些編譯器能計算出結果的表達式數組
const { ptrSize = unsafe.Sizeof(unintptr(0)) strSize = len("Hello") }
【2】當常量的不指定類型和值,默認和上一行的常量的類型和值相同安全
const { x uint6 = 120 y s = "abc" z }
關鍵字:iota數據結構
const { a = iota // 0 默認爲0 b // 1 默認遞增1 c = 100 // 100 手動設置數據 d // 100 e = iota // 4 須要顯式調用iota,計算c、d的位置 d // 5 }
特指:slice、map、chaneel函數
定義:使用type建立用戶的自定義類型,包括基於現有的基礎類型、結構體、函數建立新的類型。ui
注意:即便type指定了新的類型,只能代表有相同的數據結構,兩個類型間沒有任何關係,不能視道別名指針
具備相同聲明的未命名類型視做同一種類型code
未命名類型轉化規則:對象
能夠經過unsafe.Pointer轉換成uintptr進行指針加減法運算,但可能形成非法訪問。接口
Pointer相似void 的萬能指針,可用來轉換指針類型,void 能安全持有對象成員,uintptr只是一種整數類型,不引用目標對象,沒法阻止垃圾回收對象內存。
是否相等和版本實現有關,不等於nil,即便長度爲0,對象依然合法存在,擁有合法的內存地址,和nil不同。在runtime/malloc.go中有個zerobase的全局變量,經過mallocgc分配的0長度的對象都使用這個地址。在棧上分配,爲調用mallocgc函數。