tech.chakapoko.com
Home / Go言語

[Go言語]スライス

スライスはある配列の連続した領域に対する参照です。スライスの型は配列とよく似た書き方をしますが、要素数は書きません。

[]int

スライスの作成

[]int{...} のように書くとスライスが作成できます。

package main

import "fmt"

func main() {
	s := []int{1, 2, 3, 4, 5}
	for i := 0; i < len(s); i++ {
		fmt.Printf("%d\n", s[i])
	}
}

出力:

1
2
3
4
5

配列からスライスを作ることもできます。次の例は1から5までの配列の2から4番目の要素までを切り取ったスライスを作成します。

package main

import "fmt"

func main() {
	a := [...]int{1, 2, 3, 4, 5}
	s := a[2:4]
	for i := 0; i < len(s); i++ {
		fmt.Printf("%d\n", s[i])
	}
}

出力:

3
4

[start:end] のstartとendが配列の最初と最後であれば省略できます。[:4] であれば配列の最初から3番目までを、[:] であれば配列の最初から最後までを切り取ります。

package main

import "fmt"

func main() {
	a := [...]int{1, 2, 3, 4, 5}
	s := a[:4]
	for i := 0; i < len(s); i++ {
		fmt.Printf("%d\n", s[i])
	}
}
1
2
3
4

スライスと配列

スライスは配列への参照でありメモリは共有しているので、スライスを変更すると配列の方も変更されます。

package main

import "fmt"

func main() {
	a := [...]int{1, 2, 3, 4, 5}
	s := a[:]
	s[2] = 100
	for i := 0; i < len(a); i++ {
		fmt.Printf("%d\n", a[i])
	}
}

出力:

1
2
100
4
5