2.4 型の変換

キャスト1とはある型を別の型へ変換することで、型のある言語には一般的に存在します。本来は定義した型のまま扱えるのがベストですが、どうしても型の変換が必要になることがあります。なお、キャストという用語は一般的なものですがGoの仕様には存在しません。Goでキャストに分類される機能には2種類あります。

  • 型変換(type conversion)

  • 型アサーション(type assertion)

型アサーションはインタフェースからのダウンキャストに使います。ダウンキャストというのは、抽象的な型(インタフェース)から具象型への変換です。抽象的な型に入っている実態によって成功したりしなかったりするもので、動的な実行時の型の確認が必要な機能です。これには複数への型とのマッチングを一度に行う型スイッチ(type switch)も含まれます。これらについては「4.3 インタフェースのキャスト 」で説明します。

1

キャストはGoの仕様にはない言葉ですが、型変換を表す一般的な言葉とプログラミング界隈で頻繁に登場します。

2.4.1 型変換(type conversion)によって型をキャストする

type宣言の左右でキャストを行うときは「型変換(type conversion)」を行います。「2.2  既存のデータ型を拡張する 」では組み込み型や既存の型にtypeで名前をつけて、メソッドを拡張する方法を紹介しました。別名がついたとはいえ、元は同じ型です。しかし、Goの中ではベースが同じでもまったく別の型として扱われるため、片方からもう片方の型へ変数を代入するとコンパイルエラーになります。

// iはint型
var i int

// ErrorCodeはintを拡張した型 ...