hiro_env

モダンな技術スタックを扱う会社のエンジニアになるまでの学習記録

Golang make関数の備忘録

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と""で初期されている