【Go】Sliceについて
#Go
Sliceは大して難しくないが...メモリの基本(スタック, ヒープ)を理解してないと厳しいかも。
だからちゃんと理解したいなら、プログラムの動作とメモリとの関係をちゃんと理解すると良い。
この基本を理解しておくと、効率の良いコードを書けるようになる。
「配列」を参照している型に過ぎない。
code: 内部構造
{
ptr: 配列へのポインタ
len: 長さ
cap: 容量
}
これだけ。この基本すら理解しておけば、あとはなんでもいい。
配列の実体は、ヒープ領域にあるかもしれないし、配列型として定義されてスタックにあるかも。
どっちでもいい。どこかにある配列を参照してると思えばいい。
ここで混乱は起きると思う。
配列型として定義しておかないと参照できないのでは?的な。
ここをうまく理解するために、スタック, ヒープとプログラムの関係を知っておく必要がある。
sliceを初期化した時には、裏側でヒープ領域に配列の実態が作られていて、それを参照するpointerと共にslice(内部構造: {ptr: 配列へのポインタ, len: 長さ, cap: 容量})が返される。
「裏で実体が作られてる」ってことを理解する。
でもそれだけではなくて、開発者が定義した配列型も参照できる。
なんにせよ、「配列の実体の参照」がsliceの正体である。
その実体は、開発者がスタック領域で作ることもあれば、裏側でヒープ領域に作られてることもある。