スライスはある配列の連続した領域に対する参照です。スライスの型は配列とよく似た書き方をしますが、要素数は書きません。
[]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