🫐
Goにおけるスライスの基礎
はじめに
Go言語では、スライス(slice)は非常に重要で柔軟なデータ型です。スライスは配列に似ていますが、より強力で便利な機能を提供します。スライスを理解することで、効率的なデータ操作や管理が可能になります。
スライスとは
スライスは、動的なサイズを持つ配列のようなデータ型です。具体的には、以下のコンポーネントから構成されます。
- ポインタ(Pointer): 元になる配列の要素への参照
- 長さ(Length): スライスが現在保持している要素の数
- 容量(Capacity): スライスの元になる配列のサイズ
配列とスライスの違い
-
固定サイズ vs 動的サイズ:
- 配列: サイズが固定されており、変更することはできません。
- スライス: サイズが動的に変わるため、要素の追加や削除が自由です。
-
宣言方法:
- 配列の場合:
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]
}
スライスの容量と長さ
スライスの長さと容量は、それぞれ len
と cap
関数で取得できます。
package main
import (
"fmt"
)
func main() {
slice := make([]int, 5, 10)
fmt.Println(len(slice)) // 出力: 5
fmt.Println(cap(slice)) // 出力: 10
}
結論
スライスはGo言語において非常に強力で柔軟なデータ型です。動的なサイズ変更、要素の追加・削除、部分取得など、多くの便利な操作が可能です。これを理解することで、効率的なデータ管理が実現できるでしょう。
Discussion