A Tour of Goを読んで「へ〜」と思ったところ その4
第4回目。1行もGoのアプリを書いていないのにGoが書けそうな気になってきた。Array
の話。
[n]T
以下のように書くと、int
型で10個の要素を持つ配列を表す。
var a [10]int
配列長は型の一部となり、変更することはできない。
もちろん可変長な配列も実現可能。
[]T
この可変長な配列はslice
と呼ばれる(可変長と呼ぶのが正しいのかは分からないけど動的にサイズを変更できる)。
primes := [6]int{2,3,5,7,11,13}
var s []int = primes[1:4] // 3, 5, 7
a[0:2]
のように指定するらしい。
Slices are like references to arrays
と書かれており、sliceは元の配列を参照しているみたいで変更が共有されるようになっている。
primes := [6]int{2,3,5,7,11,13}
var s []int = primes[1:4] // 3, 5, 7
var t []int = primes[2:5] // 5, 7, 11
fmt.Println(s, t) // [3 5 7] [5 7 11]
t[0] = 101
fmt.Println(s, t) // [3 101 7] [101 7 11]
リテラル
これがArrayのリテラル。
a := [2]int{1,2}
ここから長さを取り除くと、sliceになる。
s := []int{1,2}
この時は実際にはArrayが作られていて、そのArrayを参照するようになっているらしい。
s[:]
sliceの際に、最小値と最大値を省略できる。
primes := [6]int{2,3,5,7,11,13}
var s []int = primes[0:6] // 2, 3, 5, 7, 11, 13
var s []int = primes[0:] // 2, 3, 5, 7, 11, 13
var s []int = primes[:6] // 2, 3, 5, 7, 11, 13
var s []int = primes[:] // 2, 3, 5, 7, 11, 13
これら全て同じsliceを作る。一番下のprimes[:]
なんかは初見殺し感があるけど、シンプルにかけて良い。
疲れたのでこの辺で今日は終わり。次はここから。