0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go言語の配列、スライス、マップ

Last updated at Posted at 2025-05-28

基本的な概念

配列(Array) - 固定長のコレクション

  • 宣言時の長さが固定され、変更不可
  • 値として扱われ、代入時にコピーされる

スライス(Slice) - 可変長の配列のようなもの

  • 参照型で、元の配列を指すポインタを持つ
  • 動的に要素を追加可能

マップ(Map) - キーと値のペアでデータを管理

  • 連想配列のような動作
  • 参照型で、初期値はnil

具体的な使用方法

配列(Array)の使用方法

// 基本的な宣言
var fruits [5]string           // 長さ5のstring配列を宣言
fruits[0] = "りんご"

// 複合リテラルによる初期化
fruits := [5]string{
    "りんご",
    "バナナ",
    "メロン",
}

// 要素数を自動的に決定する場合
fruits := [...]string{
    "りんご",
    "バナナ",
    "メロン",
}

スライスの使用方法

// スライスの作成
fruits := []string{"りんご", "バナナ"}

// 配列からスライスを作成
array := [5]int{1, 2, 3, 4, 5}
slice := array[1:3]  // インデックス1から3までをスライス

// appendで要素を追加
fruits = append(fruits, "メロン")

// make関数での作成
newSlice := make([]int, 5, 10)  // 長さ5、容量10のスライス

マップの使用方法

// マップの作成
personAges := map[string]int{
    "田中": 25,
    "鈴木": 30,
}

// 値の取得と更新
age := personAges["田中"]      // 値の取得
personAges["佐藤"] = 28       // 新しい要素の追加

// 存在しないキーへのアクセスはゼロ値が返る
unknownAge := personAges["山田"]

// make関数での作成
ages := make(map[string]int, 10)  // 初期容量10のマップ

重要な注意点

配列とスライスの違い - 配列は固定長だが、スライスは可変長

  • 配列は値渡しだが、スライスは参照渡し
  • スライスにはlen()cap()という組み込み関数がある
    * スライスは、その内部構造であるスライスヘッダ(ポインタ、長さ、容量)が値渡しで渡される。ただし、スライスヘッダ内のポインタが基となる配列を指し示すため、スライス経由で行われた要素の変更は元の基底配列に反映される。

マップの特徴 - キーは一意でなければならない

  • 存在しないキーのアクセスはゼロ値を返す
  • delete()関数で要素を削除可能

パフォーマンス考慮事項 - 大きな配列を関数に渡す場合はスライスとして渡すことが推奨

  • マップの初期容量を適切に設定すると良い場合がある
  • スライスのappend操作は要素数が容量を超える場合、新しい配列が作られる
0
0
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?