- array,structはサイズ固定
- maps,slicesはサイズ変動
- sliceの前にarrayを学ぶこと
- 宣言
- var hoge [3]int // [0 0 0]
- hoge := [3]int{}// [0 0 0]
- 宣言+初期化
- hoge := [3]int{1,2,3}// [1 2 3]
- hoge := [...]int{1,2,3}// [1 2 3]
- hoge := [...]int{9: -1} //9以外はintの初期値である0
- []でアクセス
- indexは0始まり
- 明示的に初期化しない要素は型のzero valueで初期化される。
- 長さ情報も配列の型のうち。[3]intと[4]intは異なる型
- 配列の長さはコンパイル時に決定し変更負荷
- len
- 配列の長さを返す
- range
- rangeで順次アクセス(はaでも&aでもいけるよう)
for i, v := range(a) {
fmt.Printf("%d %d\n", i,v);
}
- 要素の型がcomparableであるならば、配列もcomparableである。
- 配列比較は2配列の要素が全て同じ値であることを示す
- ==,!=
- 2つの配列の型が違うとコンパイルエラー
-
関数引数は値渡し
- 配列はコピーされたもの
- 関数内で配列を変更しても呼び出し元は影響しない。
-
ポインタを値渡し
- コピーが嫌ならポインタを渡す
- ただし配列を書き換えると呼び出し元に影響
- 型は変更できない(配列の長さがきまっている)
- 固定サイズのarray,hashを引数に渡すことは、ほぼない。sliceを使う。
// pointを使った初期化
func zero(ptr *[32]byte) {
*ptr = [32]byte{};
}