カテゴリ: Go言語 更新日: 2025/10/06

Go言語のインターフェースで実現するポリモーフィズムの基本

Go言語のインターフェースで実現するポリモーフィズムの基本
Go言語のインターフェースで実現するポリモーフィズムの基本

先生と生徒の会話形式で理解しよう

生徒

「先生、Go言語でポリモーフィズムってどうやって実現するんですか?」

先生

「ポリモーフィズムは、同じ操作でも異なるオブジェクトごとに異なる動作を実現する仕組みです。Goではインターフェースを使うことで、これを簡単に実現できます。」

生徒

「インターフェースを使うだけでそんなことができるんですか?」

先生

「そうです。インターフェースは『こういう機能を持っているもの』と宣言する抽象的な型で、具体的な構造体がその機能を実装すれば、同じ操作で扱えるんです。」

生徒

「具体的な例を見てみたいです!」

先生

「では、簡単な例を順に説明しましょう。」

1. ポリモーフィズムとは?

1. ポリモーフィズムとは?
1. ポリモーフィズムとは?

ポリモーフィズムとは、ギリシャ語で「多くの形」を意味し、プログラミングでは同じ操作で異なる型に対応できることを指します。例えば、動物の鳴き声を出すメソッドがあったとして、犬なら「ワンワン」、猫なら「ニャー」と鳴くように処理を変えられます。

2. Go言語のインターフェースでポリモーフィズムを実現

2. Go言語のインターフェースでポリモーフィズムを実現
2. Go言語のインターフェースでポリモーフィズムを実現

Goでは、インターフェースを定義して構造体がそれを実装することでポリモーフィズムを実現できます。インターフェースには「どんなメソッドを持っているか」を宣言します。


type Animal interface {
    Speak()
}

type Dog struct{}
type Cat struct{}

func (d Dog) Speak() {
    fmt.Println("ワンワン")
}

func (c Cat) Speak() {
    fmt.Println("ニャー")
}

ここでは Animal インターフェースを定義し、DogCatSpeak メソッドを実装しています。

3. インターフェース型で共通操作

3. インターフェース型で共通操作
3. インターフェース型で共通操作

インターフェース型に格納することで、異なる型でも同じ操作で扱えます。


func MakeSpeak(a Animal) {
    a.Speak()
}

func main() {
    var dog Animal = Dog{}
    var cat Animal = Cat{}

    MakeSpeak(dog) // ワンワン
    MakeSpeak(cat) // ニャー
}

このように、MakeSpeak 関数では Animal 型の引数を受け取り、内部では Speak メソッドを呼ぶだけで、犬も猫も鳴き声を出せます。これがポリモーフィズムです。

4. ポリモーフィズムの利点

4. ポリモーフィズムの利点
4. ポリモーフィズムの利点
  • 同じ関数や操作で異なる型を扱える
  • コードの再利用性が高まる
  • 拡張性が高く、新しい型を追加しやすい
  • プログラムの構造がわかりやすくなる

Goのインターフェースは抽象的で柔軟な設計を可能にし、ポリモーフィズムを簡単に取り入れることができます。

5. 実用例:動物園のシステム

5. 実用例:動物園のシステム
5. 実用例:動物園のシステム

例えば動物園のシステムを作るとき、Animal インターフェースを使えば、犬や猫、鳥など新しい動物を追加しても共通の操作で管理できます。


animals := []Animal{Dog{}, Cat{}}

for _, a := range animals {
    a.Speak()
}

このループでは、リストに追加したすべての動物に対して Speak メソッドを呼び出せるので、新しい動物を追加するたびに関数を変更する必要がありません。

カテゴリの一覧へ
新着記事
Go言語の関数でエラーハンドリングする基本的な方法
Go言語のスライス・マップ・配列をまとめて比較してみよう!初心者でもわかる使い分けの基本
Go言語の条件分岐の見やすい書き方を徹底解説!初心者でもわかるif文の使い方
Go言語とは何か?初心者向けに特徴・できること・インストール手順までやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.2
Java&Spring記事人気No2
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.3
Java&Spring記事人気No3
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.4
Java&Spring記事人気No4
Kotlinのデータクラス(data class)とは?便利な特徴と使い方を初心者向けにやさしく解説!