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

Go言語のインターフェースを活用した柔軟なコードの書き方

Go言語のインターフェースを活用した柔軟なコードの書き方
Go言語のインターフェースを活用した柔軟なコードの書き方

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

生徒

「先生、Go言語で同じ処理を色々なデータに使えるようにしたいんですが、どう書けばいいですか?」

先生

「その場合はインターフェースを使うと便利です。インターフェースを使うと、異なる型でも同じ操作で扱える柔軟なコードが書けます。」

生徒

「柔軟って具体的にはどんなイメージですか?」

先生

「例えば、犬や猫や鳥でも『鳴く』という操作は同じです。型が違っても『鳴く』という操作が保証されるので、共通のコードで扱えるようになります。」

生徒

「なるほど!コードでどう書くか見てみたいです。」

1. インターフェースの基本的な書き方

1. インターフェースの基本的な書き方
1. インターフェースの基本的な書き方

Go言語のインターフェースは、共通の操作を定義するためのものです。どの構造体でもその操作を実装すれば、同じインターフェースとして扱えます。


type Speaker interface {
    Speak()
}

type Dog struct{}
type Cat struct{}

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

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

DogやCatはそれぞれSpeakメソッドを持つので、Speakerインターフェースとして扱うことができます。

2. インターフェースを使った柔軟な関数設計

2. インターフェースを使った柔軟な関数設計
2. インターフェースを使った柔軟な関数設計

インターフェースを引数に使うことで、異なる型でも同じ関数で処理できます。


func MakeSpeak(s Speaker) {
    s.Speak()
}

func main() {
    dog := Dog{}
    cat := Cat{}
    
    MakeSpeak(dog)
    MakeSpeak(cat)
}

このように、関数MakeSpeakはDogでもCatでも使えるので、柔軟で拡張性のあるコードになります。

3. 複数のインターフェースを組み合わせる

3. 複数のインターフェースを組み合わせる
3. 複数のインターフェースを組み合わせる

Goでは、インターフェース同士を組み合わせてより複雑な動作を扱えます。例えば動物が鳴くだけでなく走る動作も追加できます。


type Runner interface {
    Run()
}

type Dog struct{}
func (d Dog) Speak() { fmt.Println("ワンワン") }
func (d Dog) Run() { fmt.Println("ダッシュ") }

type Cat struct{}
func (c Cat) Speak() { fmt.Println("ニャー") }
func (c Cat) Run() { fmt.Println("ススッと走る") }

type Animal interface {
    Speaker
    Runner
}

これにより、AnimalインターフェースとしてSpeakとRunの両方の操作を共通化できます。

4. 実用例:複数の型を同じ関数で処理

4. 実用例:複数の型を同じ関数で処理
4. 実用例:複数の型を同じ関数で処理

インターフェースを使えば、新しい動物型を追加しても既存の関数を変更する必要がありません。


func PerformActions(a Animal) {
    a.Speak()
    a.Run()
}

func main() {
    dog := Dog{}
    cat := Cat{}
    
    PerformActions(dog)
    PerformActions(cat)
}

このように、柔軟で拡張性のあるコードを書けることがインターフェースの最大の利点です。

5. コード設計のポイント

5. コード設計のポイント
5. コード設計のポイント
  • インターフェースを使うことで、型に依存しない汎用的なコードを書く
  • 新しい型を追加しても既存コードを変更せずに済む
  • 共通の操作を抽象化することでコードの見通しがよくなる
  • テストや保守も簡単になり、チーム開発でも役立つ

Go言語のインターフェースを上手に活用すると、型に縛られない柔軟で安全なプログラム設計が可能になります。

カテゴリの一覧へ
新着記事
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)とは?便利な特徴と使い方を初心者向けにやさしく解説!