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()
メソッドを呼び出すことができます。