みなさん、Goのmake関数って使いこなせましたか?
考え方としてはデータ構造を作成するものなイメージはありますが、すぐ使ってみろと言われたら無理だなと感じ、理解が浅いなと思ったので、今回はmake関数について簡単にまとめようと思います。
make関数とは
動的にデータ構造であるスライス、マップを作成することができるgoの組み込み関数のことです。
スライス
配列とは少し異なった、入れることのできる要素数を可変長にしたものです。
Python等でいうリストに近いです。
マップ
連想配列と呼ばれるもので、キーに対してバリューを対応させて配列のように並べていくデータ構造のことです。
長さと容量
また、これらのデータ構造には長さと容量という概念が存在します。
長さ
スライスにおける現在存在している要素の数のことです。
容量
スライスの元となる配列の要素数のことです。
わかりづらいですが、配列はスライスからできているので、要素が追加してもまたメモリ空間を作らなくてもいいように、先に取っておいた空間のことと認識するとわかりやすいかなと思います。
実際にmake関数を作ってみる
配列
配列は、makeを使わない場合は下のように宣言します。
var 変数名 [len]type
スライス
スライスは下のように使用することが可能です。
make([]type, len)
make([]type, len, cap)
入れる要素の型をstringとすると下のように作成します。
nameSlice := make([]int, 0)
長さを指定すると表示はデータ型によって異なります。
make([]int, 2) //[0,0]
make([]bool, 2) //[false,false]
make([]string,2) //["",""]
ここに初期容量3とすると下のようになります。
nameSlice := make([]int, 0, 3)
マップ
マップを作成するには下のような感じにコードを生成します。
make(map[key_type]value_type)
make(map[key_type]value_type, cap_first_value)
マップは下のように作ります。
nameList := make(map[int]string)
初期容量を100とすると下のようになります。
nameList := make(map[int]string,100)