Go言語とインターフェース
Go言語には、他のオブジェクト指向言語とは少し異なる"インターフェース"という概念が存在します。
インターフェースとは、メソッドのシグネチャの集まりで、これによりGoは鴨の型(ダックタイピング)を実現します。
鴨の型とは、「もしもそれが鴨のように歩き、鴨のように鳴くなら、それは鴨である」という考え方です。
インターフェースの定義
Goのインターフェースは、メソッドのシグネチャを定義した型です。
これにより、インターフェースを実装する任意の型は、そのインターフェースのメソッドを持つことになります。
以下に、インターフェースを定義し、それを実装する具体的な型を示します。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package main import ( "fmt" ) // Speaker インターフェースを定義 type Speaker interface { Speak() string } // Dog 型を定義 type Dog struct{} // Dog 型に Speak メソッドを実装 func (d Dog) Speak() string { return "Bow-wow" } // Cat 型を定義 type Cat struct{} // Cat 型に Speak メソッドを実装 func (c Cat) Speak() string { return "Meow" } func main() { var speaker Speaker // Dog 型の値を Speaker インターフェース型の変数に代入 speaker = Dog{} fmt.Println(speaker.Speak()) // Cat 型の値を Speaker インターフェース型の変数に代入 speaker = Cat{} fmt.Println(speaker.Speak()) } |
出力結果
Bow-wow Meow
インターフェースの利点
インターフェースを使用する主な利点は、コードの抽象化と柔軟性の向上です。
具体的な型に依存せず、同じ振る舞い(メソッド)を持つ任意の型を同じように扱うことができます。
さらに、インターフェースを使用すると、コードのテストやモック作成も容易になります。
以下に、インターフェースを活用したコードの例を示します。今回は、異なる型が同じインターフェースを実装することで、同じように扱うことができます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
package main import ( "fmt" ) // Speaker インターフェースを定義 type Speaker interface { Speak() string } // Dog 型を定義 type Dog struct{} // Dog 型に Speak メソッドを実装 func (d Dog) Speak() string { return "Bow-wow" } // Cat 型を定義 type Cat struct{} // Cat 型に Speak メソッドを実装 func (c Cat) Speak() string { return "Meow" } // Robot 型を定義 type Robot struct{} // Robot 型に Speak メソッドを実装 func (r Robot) Speak() string { return "Beep-boop" } func main() { speakers := []Speaker{ Dog{}, Cat{}, Robot{}, } for _, speaker := range speakers { fmt.Println(speaker.Speak()) } } |
出力結果
Bow-wow Meow Beep-boop
まとめ
今回は、Go言語のインターフェースについて学びました。
インターフェースは、メソッドのシグネチャの集まりで、それを実装する任意の型は、そのインターフェースのメソッドを持つことになります。
これにより、Go言語では同じインターフェースを実装する異なる型を同じように扱うこうことができ、コードの抽象化や柔軟性を向上させることが可能です。
また、インターフェースを使用すると、コードのテストやモック作成も容易になるというメリットもあります。
最後まで読んで頂き、ありがとうございました。少しでもお役にたてたなら幸いです!