Skip to content

Instantly share code, notes, and snippets.

@tokubass
Created June 8, 2016 09:57
Show Gist options
  • Save tokubass/70671301a21ec04e1478f20c3d1dbb36 to your computer and use it in GitHub Desktop.
Save tokubass/70671301a21ec04e1478f20c3d1dbb36 to your computer and use it in GitHub Desktop.
The Go Programming Language - ch4 array

4 Composite Types

  • array,structはサイズ固定
  • maps,slicesはサイズ変動
  • sliceの前にarrayを学ぶこと

4.1 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{};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment