Goインターフェースアサーションの使い方
Go言語では、インターフェースアサーションはインターフェース型を変換する方法です。インターフェースアサーションは型アサーション構文を使用して行うことができ、構文は次のとおりです。
value, ok := interfaceValue.(Type)
interfaceValueはインタフェース型の値で、Typeはそれを変換したい具体的な型です。
インタフェースの型アサーションは2つの値「バリュー」と「OK」を返します。インタフェース値の動的型がアサーションの型と一致する場合、「バリュー」はその特定の型の値になり、「OK」はtrueになります。アサーションに失敗した場合、「バリュー」は特定の型のゼロ値になり、「OK」はfalseになります。
インターフェイスのインプリメンテーションをアサートするためのサンプルを示します。
package main
import "fmt"
type Shape interface {
Area() float64
}
type Circle struct {
radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.radius * c.radius
}
func main() {
var s Shape
c := Circle{radius: 5}
s = c
if circle, ok := s.(Circle); ok {
fmt.Println("Circle area:", circle.Area())
} else {
fmt.Println("Not a circle")
}
}
上記のコードでは、Shapeというインターフェイスと、Shapeインターフェイスを実装したCircle構造体を定義しました。main関数では、Circle構造体のインスタンスをShapeインターフェイスタイプの変数sに代入します。その後、インターフェイスアサーションを使ってsがCircleタイプの値かどうかを確認し、Circle構造体のAreaメソッドを呼び出して面積を計算しました。
インターフェースがアサートできれば、円の面積を出力します。そうでない場合は、「円ではない」と出力します。