make関数
3つの型を作成する時に使われる
- Slice
- Map
- Channel
用法
Slice
make([]T, length, capacity)
- capacityのみ省略可能
- capacityをつけると容量をあらかじめ指定するため、要素を追加したときに再割り当てのメモリ操作をしないで済む。パフォーマンスの向上を見込める。
- capacityを超えても再割り当てが行われるため問題はない。
- lengthで指定した要素の分だけ最初はT型のゼロ値で初期化される。
Map
make(map[T]V, size)
- sizeは省略可能。
- 第二引数のsizeで、Mapがあらかじめ確保する初期のエントリー数のヒントを与えられる。
Channel
make(chan T, buffer)
- bufferはチャネルのバッファサイズを指定し、非ブロッキングで受信可能な値の数。
- bufferは省略すると、非バッファチャネルとなる。
その他の生成方法や初期化についてのメモ
スライスの生成方法
make([]T, length, capacity)
とするか、s := []T{}
とすることで中身がある状態で生成可能- 宣言しただけの状態
var s []T
でも変数sの中身はnilだが生成可能。(どの方法でもappendが使える)
スライスも構造体も、その他全ての組み込み型は宣言のみでゼロ値で初期化される。
- スライスのゼロ値 => nil
- 構造体のゼロ値 => 各フィールドがその型のゼロ値の状態を持つ
例
type SomeType struct { A int B string } var s SomeType // sのフィールドA, Bは宣言された時点でそれぞれ0と""で初期されている