見出し画像

Golangのmakeを使ったスライスの仕様

最近はGo言語を勉強しており、基本的なことについて忘れないようにするためのメモを兼ねた入門記事です。

makeの仕様

makeの細かい仕様に関してはこちらに載ってます。
makeによる割り当て

makeの引数は左から([]int)型、長さ、キャパシティー(容量)を表しています。

var a []int = make([]int, 0, 5)

当然ですが、以下のように長さがキャパシティを超えるように宣言すればエラーが出ます。

var a []int = make([]int, 6, 5)

// len larger than cap in make([]int)


キャパシティーの引数を省略した場合の違い

第3引数のキャパシティー部分を省略した以下のようなスライス構造に違いが出ます。

キャパシティー(容量)が5で、0のint配列をキャパシティーと同じ数の長さ分確保する

var c []int = make([]int, 5)
fmt.Println(c)
fmt.Printf("len=%d cap=%d value=%v\n", len(c), cap(c), c)

// [0 0 0 0 0]
// len=5 cap=5 value=[0 0 0 0 0]


キャパシティー(容量)が5で、長さが0のint配列を確保する

var c []int = make([]int, 0, 5)
fmt.Println(c)
fmt.Printf("len=%d cap=%d value=%v\n", len(c), cap(c), c)

// []
// len=0 cap=5 value=[]

どちらもキャパシティーに違いは無いものの、上記の場合だと0が5つ確保されたスライスが生成され、下記の場合だと空のスライスが生成されます。

この記事が気に入ったらサポートをしてみませんか?