4.3 インタフェースのキャスト

インタフェースは、抽象化のためのツールです。抽象化によって、特定の型ではなく特定のふるまいを持つインスタンスをまとめて扱えます。具象型から、それを含むことが静的にわかるインタフェース型への代入ではキャスト(アップキャスト)は不要ですが、逆の場合(ダウンキャスト)やまったく別のインタフェースに対する代入ではキャストが必要です。インタフェースのキャストで使うのは、実行時の型を確認する型アサーションです。

../_images/type_cast.png

図4-1: インタフェース間でキャストが必要、不要な場合

4.3.1 型アサーション・型スイッチの基本の書き方

型をキャストして値を取り出すときは 定義型 でも紹介した型アサーション(type assertion)を使いますが、複数の型に対して同時に型アサーションが行える型スイッチ(type switch)も使えます。

たとえば、contextパッケージで提供されているContextは、任意の値を格納しValue()メソッドを使って取り出せますが、この型がinterface{}型です。次のサンプルに示すように、値を取り出すときには型アサーションまたは型スイッチを行います。

	// "favorite"というキーに対して、"銭形平次"という値を設定する
	// context.Contextについては並行処理の章で詳しく説明します
	ctx := context.WithValue(context.Background(), "favorite" ...