🫐

Goにおけるスライスの基礎

2024/10/08に公開

はじめに

Go言語では、スライス(slice)は非常に重要で柔軟なデータ型です。スライスは配列に似ていますが、より強力で便利な機能を提供します。スライスを理解することで、効率的なデータ操作や管理が可能になります。

スライスとは

スライスは、動的なサイズを持つ配列のようなデータ型です。具体的には、以下のコンポーネントから構成されます。

  • ポインタ(Pointer): 元になる配列の要素への参照
  • 長さ(Length): スライスが現在保持している要素の数
  • 容量(Capacity): スライスの元になる配列のサイズ

配列とスライスの違い

  1. 固定サイズ vs 動的サイズ:

    • 配列: サイズが固定されており、変更することはできません。
    • スライス: サイズが動的に変わるため、要素の追加や削除が自由です。
  2. 宣言方法:

    • 配列の場合:
      var arr [5]int
      
    • スライスの場合:
      var slice []int
      
    • スライスの初期化と容量の指定は make 関数を使用します:
      slice := make([]int, 5, 10) // 長さ5、容量10のスライスを作成
      

スライスの基本操作

スライスの宣言と初期化

package main

import (
	"fmt"
)

func main() {
	// スライスの宣言と初期化
	var numbers []int
	numbers = []int{1, 2, 3, 4, 5}

	// make関数を使用してスライスを作成
	slice := make([]int, 5, 10)

	fmt.Println(numbers) // 出力: [1 2 3 4 5]
	fmt.Println(slice)   // 出力: [0 0 0 0 0]
}

要素の追加と削除

スライスには append 関数を使用して要素を追加できます。

package main

import (
	"fmt"
)

func main() {
	numbers := []int{1, 2, 3}

	// 要素を追加
	numbers = append(numbers, 4, 5)

	fmt.Println(numbers) // 出力: [1 2 3 4 5]

	// 削除(3番目の要素を削除)
	numbers = append(numbers[:2], numbers[3:]...)

	fmt.Println(numbers) // 出力: [1 2 4 5]
}

スライスの部分取得

スライスの一部を取得するにはスライス演算子 [:] を使用します。

package main

import (
	"fmt"
)

func main() {
	numbers := []int{1, 2, 3, 4, 5}

	// 2番目から4番目までを取得(インデックスは0から始まる)
	sub := numbers[1:4]

	fmt.Println(sub) // 出力: [2 3 4]
}

スライスの容量と長さ

スライスの長さと容量は、それぞれ lencap 関数で取得できます。

package main

import (
	"fmt"
)

func main() {
    slice := make([]int, 5, 10)
    
    fmt.Println(len(slice)) // 出力: 5
    fmt.Println(cap(slice)) // 出力: 10
}

結論

スライスはGo言語において非常に強力で柔軟なデータ型です。動的なサイズ変更、要素の追加・削除、部分取得など、多くの便利な操作が可能です。これを理解することで、効率的なデータ管理が実現できるでしょう。

Discussion