配列 #
配列を初期化する #
package main
import (
"fmt"
)
func main() {
// 配列型の変数を定義する
// 初期値は要素の初期値が入った配列
var a0 [3]int
fmt.Printf("%#v\n", a0) // == [3]int{0, 0, 0}
// 初期化時に値を指定できる
a1 := [2]int{2, 3}
fmt.Printf("%#v\n", a1) // == [2]int{2, 3}
// 配列長を ... とすることで自動で長さが決まる
a2 := [...]int{1, 2, 3, 4, 5}
fmt.Printf("%#v\n", a2) // == [5]int{1, 2, 3, 4, 5}
}
配列の要素の変更と取得をする #
package main
import (
"fmt"
)
func main() {
var a [3]int
// 配列に値を変更する
a[1] = 1
a[2] = 3
fmt.Println(a) // == [0 1 3]
// 配列から値を取得する
v := a[1]
fmt.Println(v) // == 1
}
配列の要素の変更と取得をする #
package main
import (
"fmt"
)
func main() {
var a [3]int
// 配列に値を変更する
a[1] = 1
a[2] = 3
fmt.Println(a) // == [0 1 3]
// 配列から値を取得する
v := a[1]
fmt.Println(v) // == 1
}
配列の要素をループで処理する #
range
を使うとインデックスと値のペアでループを回せる。
package main
import (
"fmt"
)
func main() {
a := [5]int{1, 2, 3, 4, 5}
for i, v := range a {
fmt.Println(i, v)
}
}
配列長を変更する #
できない。 可変長配列が欲しい場合はスライスを使う。
要素の追加と削除をする #
できない。 可変長配列が欲しい場合はスライスを使う。
スライスと配列を相互変換する #
配列の添字に範囲を指定するとスライスを返す。 そのとき範囲の開始と終了の位置を省略すると配列丸ごとスライスに変換できる。
スライスは配列のポインタにキャストできる。
package main
import (
"fmt"
)
func main() {
// 配列からスライスに変換する
a1 := [3]int{2, 4, 6}
s1 := a1[:]
fmt.Println(s1) // == [2 4 6]
// スライスから配列のポインタに変換する
s2 := []int{1, 3, 5}
a2 := (*[3]int)(s2)
fmt.Println(*a2) // == [1 3 5]
}