golang slice 必知必會 未完待續

數組是什麼,slice是什麼

在golang中,咱們能夠像C語言同樣建立一個數組,也能夠建立一個動態數組(slice)
數組:golang

a := [2]int{1, 2}
a[0]=3
a[1]=4

此時咱們建立了一個包含2個元素的數組,[]中只能是常量,由於數組在建立的時候必須是肯定的。
切片:
make數組

slice與數組的關係

經過閱讀源碼,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

從數組中獲取slice

理解append,如何避免掉坑

讓人迷惑的操做指針

相關文章
相關標籤/搜索