Go言語では、インターフェースを使用して抽象化を実現します。
インターフェースは、メソッドの集合体であり、そのメソッドのシグネチャー(引数の型、戻り値の型など)を定義します。
具体的な型は、そのインターフェースを実装することで、そのインターフェースを満たすことができます。
以下は、簡単な例です。
Animalというインターフェースを定義し、そのインターフェースを実装するDogとCatという2つの具象型を定義します。 MakeSound()メソッドは、Animalインターフェースで定義されたメソッドであり、どちらの具象型でも異なる音を出すように実装されます。 main関数では、MakeSound()メソッドを呼び出すことにより、DogとCatの両方が異なる音を出すことが確認できます。
package main
import "fmt"
type Animal interface {
MakeSound()
}
type Dog struct{}
func (d Dog) MakeSound() {
fmt.Println("Woof!")
}
type Cat struct{}
func (c Cat) MakeSound() {
fmt.Println("Meow!")
}
func main() {
animals := []Animal{Dog{}, Cat{}}
for _, animal := range animals {
animal.MakeSound()
}
}
出力結果
Woof!
Meow!
この例では、Animalというインターフェースを使用して、DogとCatという2つの具象型を抽象化しています。
MakeSound()メソッドを定義することで、DogとCatの両方がAnimalインターフェースを満たすことができ、同じスライス内に格納され、MakeSound()メソッドを呼び出すことができます。