Golang interface{}

interface{}は{}も含めて型の名前。

int, float64, stringなど全ての型と互換性をもっている。

var x interface{}
fmt.Printf("%#v", x) // "<nil>"

のように初期値は "<nil>" と出力される。

Goにおける"<nil>"は具体的な値を持っていないという状態を表す特殊な値になる。

すべての型と互換性があるため以下のように書ける。

var x interface{}
x = 1
x = 3.14
x = "ごー"
x = [...]int{1, 2, 3}

あらゆる型を代入することができる。

interface{}はあらゆる型を汎用的に表現できるものであり、演算の対象として利用することはできない。

var x, y interface{}
x, y = 1, 2
z := x + y //できない