配列(Array)とスライス(Slice)について
それぞれの特徴をまとめた
配列(Array)
・配列は固定長のデータ構造であり、要素数を宣言時に指定し、後から変更することはできない。
・配列は要素の型と要素数を指定して宣言する例えば、 var arr [5]int は、int型の要素を5つ持つ配列となる
・配列はメモリ上に連続した領域を確保し、要素のインデックスを使ってアクセスする
・配列は静的なサイズを持つため、動的に要素を追加したり削除したりする必要がある場合には適していない
// 配列の定義
var arrayName [size]dataType
// 例: 整数型の配列を定義する
var numbers [5]int
// 初期化された配列
var numbers = [5]int{1, 2, 3, 4, 5}
// 要素数を省略することもできる(要素数は初期化された要素の数で決まる)
var numbers = [...]int{1, 2, 3, 4, 5}
// 特定のインデックスに値を設定する
numbers[0] = 10
スライス(Slice)
・スライスは可変長のデータ構造であり、動的に要素の追加や削除が可能
・スライスは配列の部分列を表現するため、既存の配列からスライスを生成することができる
・スライスは、要素のインデックスを使ってアクセスするが配列とは異なり、スライスの長さや容量が動的に変化する
・スライスは make() 関数を使って作成する。例えば、 var slice []int = make([]int, 5) は、int型の要素を5つ持つスライスとなる
・スライスは動的なサイズを持つため、動的なデータ構造を扱う場合や、要素の追加や削除が必要な場合に適している。
// スライスの定義
var sliceName []dataType
// 例: 整数型のスライスを定義する
var numbers []int
// 初期化されたスライス
numbers := []int{1, 2, 3, 4, 5}
// スライスの一部を取得する
var partOfSlice = numbers[startIndex:endIndex]
// スライスに要素を追加する
numbers = append(numbers, 6)
ということで、スライスのほうが融通効くためスライスを利用するパターンが多いそうだ。
でも配列は配列で使い道がありそう。今業務で作ってるテストデータ作成ツールでも固定要素の配列を使用しているし、、
適宜使い分けましょうということで。
そしてスライスをより便利につかう関数があるということで調べてみた結果が以下
len() 関数
len() 関数は、スライスや配列、マップ、文字列などの長さ(要素数)を返す。
s := []int{1, 2, 3, 4, 5}
fmt.Println(len(s)) // スライスの長さを出力する
cap() 関数
cap() 関数は、スライスの容量を返。スライスの容量は、スライスが内部的に割り当てられている配列のサイズを表す。
s := make([]int, 5, 10) // 容量10のスライスを作成する
fmt.Println(cap(s)) // スライスの容量を出力する
len() はスライスや配列、マップ、文字列などの長さを取得し、cap() はスライスの容量を取得する
おそらくよく使用することになると思うので、勝手に覚えるとは思うが頭の片隅に潜めておく。