Dev Study
Go コース

39. 空インターフェース interface{} と any

メソッドを一つも要求しないインターフェースを空インターフェースと呼び、interface{} と書きます。どんな型もメソッドゼロ個という条件は満たすので、空インターフェースの変数にはあらゆる型の値を入れられます。Go 1.18 以降では、これと完全に同じ意味の別名 any が導入され、読みやすさのため any を使うのが推奨されています。

空インターフェース(any)は「どんな型でも受け取りたい」場面で使います。fmt.Println が任意個・任意型の引数を取れるのは、内部で ...any を受け取っているからです。ただし any に入れた時点で元の具体的な型情報はコンパイラからは隠れるため、そのままではフィールドにアクセスしたり型固有の演算をしたりはできません。

any から元の型を取り出すには、次のレッスンで学ぶ型アサーションや型 switch を使います。便利な反面、any を多用すると型チェックの恩恵が薄れ、実行時エラーのリスクが増えます。Go 1.18 で導入されたジェネリクスを使えば「どんな型でも」を型安全に書ける場面も多いので、any はそれが難しいときの最後の手段と考えるとよいでしょう。

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Go
公式ドキュメントで詳しく ↗