Goのinterface型の使い方は?
Go言語では、インターフェース(interface)は、一連のメソッドを定義した抽象型です。インターフェース型の変数には、これらのメソッドを実装した具体的な型の値を格納することができます。インターフェース型の使用手順は以下の通りです。
- 種類
- インタフェース
type Shaper interface {
Area() float64
Perimeter() float64
}
上記のコードは、Shaperインターフェースを定義しており、そのインターフェースにはArea()とPerimeter()という2つのメソッドが定義されています。
- インターフェースメソッドの実装:特定のタイプがインターフェースを実装するためには、そのタイプにインターフェースで定義されたすべてのメソッドを実装する必要があります。例:
type Rectangle struct {
width, height float64
}
func (r Rectangle) Area() float64 {
return r.width * r.height
}
func (r Rectangle) Perimeter() float64 {
return 2 * (r.width + r.height)
}
上記のコードは、Rectangle型を定義し、そのメソッドをShapeインターフェースで実装しています。
- 例えば、インターフェースの種類を使用して、変数を宣言し、その具体的な型を変数に代入することができます。
var s Shaper
s = Rectangle{width: 5, height: 3}
fmt.Println(s.Area())
fmt.Println(s.Perimeter())
上記のコードでは、Rectangle型の値をインターフェース型の変数sに代入し、その変数を使用してインターフェースで定義されたメソッドを呼び出します。
Goのインターフェースは暗黙的に実装されることに注意が必要です。つまり、あるタイプがインターフェースで定義されたすべてのメソッドを実装している場合、そのタイプはそのインターフェースを実装したと見なされ、明示的な宣言は必要ありません。この機能により、Go言語のインターフェースは非常に柔軟で使いやすくなっています。