Go 速習チュートリアル

Go 言語のアレイ

1. Goのアレイ (Go Arrays)

アレイ(Array)は、個別のバリアブル(変数)を一つずつ定義する代わりに、同じタイプ(型)の複数の値を一つのバリアブルに保存するために使用されます。

2. アレイのデクレア (Declare an Array)

Goにおいて、アレイをデクレア(宣言)する方法は2通りあります。

2.1. varキーワードを使用する方法

構文(Syntax)

var array_name = [length]datatype{values} // レングスを明示的に定義
// または
var array_name = [...]datatype{values} // レングスを値から推論

2.2. := 記号を使用する方法

構文(Syntax)

array_name := [length]datatype{values} // レングスを明示的に定義
// または
array_name := [...]datatype{values} // レングスを値から推論

       注意:レングス(長さ)は、アレイに保存するエレメント(要素)の数を指定します。Goのアレイは固定長です。レングスは数値で定義するか、あるいは値の数に基づいてコンパイラに推論させることができます。

3. アレイの実装例 (Array Examples)

3.1. レングスを定義した例

この例では、レングスを指定して2つのアレイ(arr1 と arr2)をデクレアしています。

package main
import ("fmt")

func main() {
  var arr1 = [3]int{1, 2, 3}
  arr2 := [5]int{4, 5, 6, 7, 8}

  fmt.Println(arr1)
  fmt.Println(arr2)
}

実行結果:

[1 2 3]
[4 5 6 7 8]

3.2. レングスを推論させた例

この例では、... を使用して、値の数から自動的にレングスを決定しています。

package main
import ("fmt")

func main() {
  var arr1 = [...]int{1, 2, 3}
  arr2 := [...]int{4, 5, 6, 7, 8}

  fmt.Println(arr1)
  fmt.Println(arr2)
}

3.3. ストリングのアレイ

ストリング(文字列)を格納するアレイの例です。

package main
import ("fmt")

func main() {
  var cars = [4]string{"ボルボ", "BMW", "フォード", "マツダ"}
  fmt.Print(cars)
}

4. アレイのエレメントへのアクセス

インデックス番号を参照することで、特定のエレメントにアクセスできます。
Goのアレイインデックスは 0 から始まります。つまり、[0] が最初のエレメント、[1] が2番目のエレメントとなります。

コード例:

package main
import ("fmt")

func main() {
  prices := [3]int{10, 20, 30}

  fmt.Println(prices[0]) // 1番目のエレメント
  fmt.Println(prices[2]) // 3番目のエレメント
}

5. アレイのエレメントの変更

インデックス番号を参照して、特定のエレメントの値を書き換えることができます。

コード例:

package main
import ("fmt")

func main() {
  prices := [3]int{10, 20, 30}

  prices[2] = 50 // 3番目のエレメントを50に変更
  fmt.Println(prices)
}

6. アレイの初期化 (Array Initialization)

コード内でアレイ全体、あるいは特定のエレメントが初期化されていない場合、そのタイプのデフォルト値が割り当てられます。

       Tips:int のデフォルト値は 0string のデフォルト値は "" です。

コード例:

package main
import ("fmt")

func main() {
  arr1 := [5]int{}              // 未初期化
  arr2 := [5]int{1, 2}          // 一部のみ初期化
  arr3 := [5]int{1, 2, 3, 4, 5} // すべて初期化

  fmt.Println(arr1)
  fmt.Println(arr2)
  fmt.Println(arr3)
}

実行結果:

[0 0 0 0 0]
[1 2 0 0 0]
[1 2 3 4 5]

7. 特定のエレメントのみ初期化

アレイ内の特定のインデックスのみを指定して初期化することも可能です。

コード例:

package main
import ("fmt")

func main() {
  // インデックス1と2のみを初期化
  arr1 := [5]int{1: 10, 2: 40}

  fmt.Println(arr1)
}

実行結果:

[0 10 40 0 0]

解説:
このアレイは5つのエレメントを持っています。

  • 1:10 は、インデックス 1(2番目のエレメント)に 10 を代入することを意味します。
  • 2:40 は、インデックス 2(3番目のエレメント)に 40 を代入することを意味します。

8. アレイのレングスを確認

アレイのレングスを取得するには、len() 関数を使用します。

コード例:

package main
import ("fmt")

func main() {
  arr1 := [4]string{"ボルボ", "BMW", "フォード", "マツダ"}
  arr2 := [...]int{1, 2, 3, 4, 5, 6}

  fmt.Println(len(arr1))
  fmt.Println(len(arr2))
}