スライスとは可変長配列を持たない代わりに実装された型。配列全体のポインタ(ptr)、配列の長さ(len)、配列の容量(cap)からなるデータ構造を保持している。配列の部分列を簡単に取り出せる。Go言語では、配列よりもスライスのほうが多く使われるようだ。実際、固定長よりも可変長で配列扱いたい感あるしね。3}````[3]`とか`[...]`せずに`[]`とする。動作の確認スライスという名前の通り、予め用意した配列を要素を部分列として取り出すことができる。a[2:4]`から分かる通り、配列の要素を指定しスライスに代入している。範囲外はもちろんコンパイルエラー。初めから(5-1)番目まで|はじめからとか最後までと指定するときは省略できる。スライス型で要素を代入するということは、元の配列データに代入ということになる。`len()`、`cap()`で指定したスライスのlenとcapのデータを参照できる。5]}```メモリ共有がなされているので関数内で操作しても、元のスライスも変更される。引数として渡してるのは配列の要素ではなく、配列全体のメモリアドレスっぽい。-だから`change2()`はエラーを吐いている。append()スライスでは、組み込み関数として、`make()`と`append()`を使うことができる。スライスが初期化され、デフォルトではゼロ値として`0`が格納されている。容量を省略すると、`要素数==容量`となる。...)`として使う。指定したスライスの末尾に追加していく。スライスの要素数は自動で増えていく。この時、配列のメモリアドレスは容量の拡張に伴い変更される。面白い例をみせましょう。"Mami"をappendする。配列のメモリを共有しているので、aとbは同じデータ構造となる。aの要素数を越えてappendするとそれぞれの出力結果は異なるが、容量に変化はないため確保されている要素では共有状態にある。14}```十分な容量を確保せずにappendした場合、自動的に容量するので前述した通り配列のメモリアドレスが変更される。なると、aとbはそれぞれ独立されたスライスとなってしまい、データの編集・追加をしてもそれらは共有されることはない。共有状態を保ったままデータの操作を行うときは、予め多めに容量をとっておく必要がありそう。コピー元)`として扱う。上記サンプルコードでは、スライスbにスライスaのデータをコピーするといった感じ。copy関数ではデータそのものをコピーしているため、共有関係はない。