A Tour of Go vol.4 (Pointer / Array / Slice)
ここから本格的な学び
Pointer
値のメモリのアドレスのこと。
type
既存の型や型リテラルに別名をつけることができる。
type Vertex struct { X int Y int }
上記はstruct型をVertexという別名の型にしている。
typeについては下記の記事が言語仕様に則って説明してくれている。
Goを学びたての人が誤解しがちなtypeと構造体について #golang
Array
[n]T
n:配列の要素数
T:配列の型
配列の長さは変えることができない。
Slice
スライスは配列への参照のようなものであり、スライスの要素変更は元の配列に影響する。
よって同じ元となる配列を共有している他のスライスは、それらの変更が反映される。
ゼロ値はnil。
型
[]T
固定長の配列に対し、スライスは可変長。
primes := [6]int{1,2,3,4,5,6} var s []int = primes[1:4] //2, 3, 4
例)構造体を要素とする配列
複数のフィールドを持つオブジェクトを要素とする配列は下記の用に作る。
s := []struct { i int b bool }{ {2, true}, {3, false}, {5, true}, }
capacity
スライスはスライスの最初の要素から数えて、元となる配列の要素数をcapacityとして持つ。
スライス s の長さと容量は len(s) と cap(s) という式を使用して得る。
a := make([]int, 5) // len=5 cap=5 [0 0 0 0 0] b := make([]int, 0, 5) // len=0 cap=5 [] c := b[:2] // len=2 cap=5 [0 0] d := c[2:5] // len=3 cap=3 [0 0 0]
要素の追加
スライスへの新しい要素の追加はappend関数を使う。
var s []int // cap=0 [] s = append(s, 2, 3) // len=2 cap=2 [2 3]