【Go言語】1つの配列変数の中に様々な型を入れることができる(interface)
基本的に型宣言の厳格なコンパイラ言語では1つの配列変数の中に異なる型を入れることができません。配列変数をint型と宣言すればint型しか入れられず例えば文字列を入れようとするとコンパイルエラーが起きます。一方で型付けの緩いインタプリタ言語だと可能だったりします。
Go言語は型指定の厳しい言語ではありますが、interfaceという仕組みを使って何でも入れられる配列を作ることができます。
以下に実例を示します。make関数の第一引数は型を指定するところですが、そこに[]interface{}
を入れてやります。すると配列変数vaueにはint型、float型、string型が一緒くたに入れらるわけです。
values := make([]interface{}, 9) values[0] = 1 values[1] = 2 values[2] = 3 values[3] = 1.23 values[4] = 4.56 values[5] = 7.89 values[6] = "test1" values[7] = "test2" values[8] = "test3" fmt.Println(values) //出力 //[1 2 3 1.23 4.56 7.89 test1 test2 test3]
構造体も格納できます。以下のプログラムは元々文字列が入っていた要素に構造体を上書きしています。問題なく動作します。
//上のソースコードに続いて書いた場合 type User struct { Name string Age int } var user1 User user1.Name = "山田太郎" user1.Age = 23 values[8] = user1 fmt.Println(values) //出力 //[1 2 3 1.23 4.56 7.89 test1 test2 {山田太郎 23}]
スポンサーリンク