在golang中,咱們能夠像C語言同樣建立一個數組,也能夠建立一個動態數組(slice)
數組:golang
a := [2]int{1, 2} a[0]=3 a[1]=4
此時咱們建立了一個包含2個元素的數組,[]中只能是常量,由於數組在建立的時候必須是肯定的。
切片:
make數組
經過閱讀源碼,slice的數據結構是這樣的數據結構
type slice struct { array unsafe.Pointer len int cap int }
這是一個典型的結構體,其中第一個字段就是數組,類型是unsafe.Pointer。在此題外話一下,簡單介紹下unsafe.Pointer。
此類型和C語言中經常使用的void*有點像,能夠經過unsafe.Pointer和其它任意類型的指針相互轉換,由於在golang中不一樣的類型之間是不能隨意轉換的,必需要有中間的unsafe.Pointer做爲過渡,例如app
var a int = 1 var b *uint64 = (*uint64)((unsafe.Pointer)(&a))
不然就會報錯,類型轉換失敗。好了,到目前爲止咱們知道了這個array的類型其實就是一個指針類型,和C語言其實相似。ui
讓人迷惑的操做指針