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

Go言語のインターフェースの実装例!構造体と一緒に学ぼう

Go言語のインターフェースの実装例!構造体と一緒に学ぼう
Go言語のインターフェースの実装例!構造体と一緒に学ぼう

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

生徒

「Go言語でインターフェースってよく聞くけど、具体的にどういうものなんですか?」

先生

「インターフェースは、Goで『これだけのメソッドを持つ型であれば使えます』という約束のようなものです。車や家電の規格のように、共通のルールを決めるイメージです。」

生徒

「なるほど。実際に使うとどういう感じになるんですか?」

先生

「では、構造体と組み合わせて、簡単な例を見ながら説明します。」

1. Go言語の構造体とは?

1. Go言語の構造体とは?
1. Go言語の構造体とは?

構造体とは、複数のデータをまとめて一つの型として扱える便利な仕組みです。例えば、人の情報として名前や年齢をまとめたい場合に使います。構造体を使うことで、データを整理して扱いやすくすることができます。

構造体を使うことで、後からインターフェースに実装するメソッドを追加したり、同じルールで複数の構造体を扱うことが可能になります。

2. インターフェースの基本的な考え方

2. インターフェースの基本的な考え方
2. インターフェースの基本的な考え方

インターフェースは、関数やメソッドが共通して持つべき形を決めるためのものです。例えば、「動物」というインターフェースを作って、すべての動物は「鳴く」というメソッドを持つと決めることができます。

この決まりを守った構造体は、インターフェース型の変数に代入できるので、関数でまとめて扱うことができます。これにより、プログラムの拡張性が高まり、コードがわかりやすくなります。

3. 構造体にインターフェースを実装する

3. 構造体にインターフェースを実装する
3. 構造体にインターフェースを実装する

インターフェースを実装するには、構造体に必要なメソッドを定義します。Goでは、特別な宣言なしで「この構造体がインターフェースのメソッドを持っている」だけで自動的に実装されたことになります。

例えば、犬と猫の構造体を作り、それぞれに「鳴く」メソッドを実装すると、両方とも同じ「動物」インターフェースとして扱うことができます。


type Animal interface {
    Speak() string
}

type Dog struct {
    Name string
}

func (d Dog) Speak() string {
    return "ワンワン"
}

type Cat struct {
    Name string
}

func (c Cat) Speak() string {
    return "ニャー"
}

4. インターフェース型の変数で統一して扱う

4. インターフェース型の変数で統一して扱う
4. インターフェース型の変数で統一して扱う

ここで便利なのが、インターフェース型の変数です。先ほど作ったDogやCatは、それぞれAnimalインターフェースを満たしているので、Animal型の変数に代入できます。こうすることで、異なる構造体でも同じ関数でまとめて扱えます。


func SaySomething(a Animal) {
    fmt.Println(a.Speak())
}

func main() {
    dog := Dog{Name: "ポチ"}
    cat := Cat{Name: "タマ"}

    SaySomething(dog)
    SaySomething(cat)
}

この例では、DogやCatのSpeakメソッドが呼ばれ、それぞれ「ワンワン」「ニャー」と出力されます。構造体ごとに異なる動作を持たせながらも、インターフェースを使うことで関数を共通化できるのです。

5. インターフェースの便利なポイント

5. インターフェースの便利なポイント
5. インターフェースの便利なポイント

インターフェースを使うと、異なる構造体でも同じ処理をまとめられます。例えば、動物の鳴き声を全部まとめて表示したり、新しい動物を追加しても既存の関数はそのまま使えます。これにより、コードの再利用性や拡張性が高まります。

また、インターフェースはプログラムの設計を柔軟にする役割もあります。複数の構造体を統一的に扱えるので、大きなプログラムでも管理しやすくなります。

6. 実際に使うときの注意点

6. 実際に使うときの注意点
6. 実際に使うときの注意点

インターフェースを使うときは、構造体が必ず必要なメソッドを持っていることを確認してください。メソッドが足りない場合、コンパイルエラーになります。

また、構造体の値レシーバーとポインタレシーバーによる違いもあります。通常は値レシーバーでも問題ありませんが、構造体の状態を変更する場合はポインタレシーバーを使うことが多いです。

7. インターフェースを使った練習方法

7. インターフェースを使った練習方法
7. インターフェースを使った練習方法

まずは小さな構造体とインターフェースを作って、メソッドを定義してみましょう。犬や猫の例のように、同じメソッドを複数の構造体に実装して、インターフェース型の変数で扱う練習が効果的です。

慣れてきたら、複数の関数でインターフェース型を使い、異なる構造体を共通化して処理することで、Go言語のインターフェースの理解が深まります。

Go言語を基礎からスッキリ学びたい人や、 文法だけでなく「実用的な使い方」まで押さえたい人には、 定番の入門書がこちらです。

基礎からわかるGo言語をAmazonで見る

※ Amazon広告リンク

まとめ

まとめ
まとめ

Go言語のインターフェースを構造体とあわせて学んできましたが、理解が深まるにつれて「なぜ多くのプログラムがインターフェースを使うのか」が自然と見えてきたはずです。インターフェースは、異なる構造体に共通する「動作」を定義し、それぞれが独自の実装を持ちながら共通のルールとして扱えるようにする非常に重要な仕組みです。構造体の特徴を生かしつつ、より柔軟なコードを書けるようになるため、Go言語における設計の中核ともいえる存在です。

実際のプログラムでは、複数の構造体が似たような動作を持つ場面が多くあります。例えば、今回の例のように犬や猫が同じ「鳴く」という動作を持つ場合、それぞれの違いを意識せずに同じインターフェース型として扱うことで、コードの読みやすさが大きく向上します。これは小さなプログラムでも効果がありますが、規模が大きくなるほどその恩恵はさらに強く感じられるようになります。インターフェースはそうした場面で「共通の入り口」を作り、拡張しやすい構造を生み出す役割を果たします。

また、インターフェースは「明示的に実装を書く必要がない」というGo特有の特徴があります。つまり、構造体がインターフェースで定義されたメソッドを持ってさえいれば、自動的にそのインターフェースを実装したと認識されます。この仕組みは、余計なコードを書かずに済むだけでなく、自然と設計をシンプルに保つ効果があります。コードを見たときにも「必要なメソッドがあるかどうか」だけで実装の関係を理解できるため、学習段階でも直感的に理解しやすい仕組みです。

さらに、インターフェースを使った関数設計は、コードの拡張性を大きく高めます。ある構造体を別の構造体に置き換えたい場合でも、インターフェースのルールにさえ従っていればほとんど変更なしで動作させることが可能です。これは「新しい動物を追加したい」「異なる種類の商品データを扱いたい」など、将来的に機能が増えていく場面で大きな力となります。こうした柔軟性と拡張性が、Go言語のインターフェースが多くの場面で活用される理由なのです。

ここで、今回学んだ内容を踏まえたもう少し発展的なサンプルコードを紹介します。インターフェースの便利さをより実感できるはずです。


// 動物の共通インターフェース
type Animal interface {
    Speak() string
    Info() string
}

// 犬の構造体
type Dog struct {
    Name string
    Age  int
}

func (d Dog) Speak() string { return "ワンワン" }
func (d Dog) Info() string  { return d.Name + " は " + strconv.Itoa(d.Age) + " 才です" }

// 猫の構造体
type Cat struct {
    Name string
    Age  int
}

func (c Cat) Speak() string { return "ニャー" }
func (c Cat) Info() string  { return c.Name + " は " + strconv.Itoa(c.Age) + " 才です" }

// 共通処理
func Describe(a Animal) {
    fmt.Println(a.Info())
    fmt.Println(a.Speak())
}

func main() {
    dog := Dog{Name: "ポチ", Age: 3}
    cat := Cat{Name: "タマ", Age: 2}

    Describe(dog)
    Describe(cat)
}

このサンプルでは、インターフェースに複数のメソッドを定義し、それぞれの構造体が独自に実装しています。さらに、Describe関数のようにインターフェース型を引数に取ることで、どんな動物であっても同じ処理を適用できるようになります。「Speak」や「Info」など、動作が増えても構造体の側で実装するだけで済むため、コード全体の保守性が高まります。

インターフェースは、設計の柔軟性と再利用性を高める重要な技術です。特に、複数の構造体を統一的に操作したいときや、将来の機能追加を見据えたコードを書くときに不可欠な存在になります。最初は抽象的に感じるかもしれませんが、実際に手を動かして例を作ってみると「こういうときに便利なんだ」という感覚が自然と身についていきます。

ぜひ、犬や猫以外の動物を自分で追加してみたり、新しいメソッドをインターフェースに加えて動作を比べてみたりして、理解を深めてみてください。繰り返し練習するほど、インターフェースがプログラミングに与える大きなメリットを感じるはずです。

先生と生徒の振り返り会話

生徒

「先生、インターフェースが何のためにあるのか、今日やっと理解できました!構造体ごとに違う処理を書けるのに、同じ関数でまとめて扱えるのが便利ですね。」

先生

「その通りです。インターフェースは『共通の約束』を決めるものなので、どんな構造体でもその約束を守っていれば自由に扱えるようになります。」

生徒

「新しい動物を追加するときも、SpeakやInfoを作るだけでよいというのがすごく使いやすいですね。プログラム全体を書き換えなくていいのは助かりそうです!」

先生

「将来の拡張に強い設計ができるというのは、インターフェースの大きな魅力です。慣れてくると、自然と『ここはインターフェースを使った方が良さそうだな』という判断ができるようになりますよ。」

生徒

「もっと他の例でも練習して、インターフェースを自由に使いこなせるようになりたいです!」

先生

「いい心がけですね。インターフェースを理解すると、Go言語の設計がぐっと楽しくなりますよ。一緒に引き続き学んでいきましょう。」

関連セミナーのご案内

【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導

「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。

本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。

具体的な開発内容と環境

【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。

【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。

この60分で得られる3つの理解

1. 環境構築の完全な理解

「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。

2. Go言語の基本構造(変数・型)

データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。

3. 読みやすいコードの書き方

ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。

※本講座は、将来的にバックエンドエンジニアクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。

セミナー画像

初めてのGo言語を一緒に学びましょう!

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のwhile的なforループの使い方!条件式ループの基本を解説
New2
Go言語
Go言語プログラムの実行方法まとめ!VSCode・ターミナルでの実行手順を解説
New3
Swift
Swift意味とは?プログラミング言語・金融・鳥の違いを徹底解説
New4
Swift
Swift 戻り値の扱い方と複数戻り値の返し方|初心者でも分かる関数の基本
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語でリダイレクト処理を行う方法(http.Redirect)を初心者向けに解説
No.2
Java&Spring記事人気No2
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方
No.6
Java&Spring記事人気No6
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.7
Java&Spring記事人気No7
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.8
Java&Spring記事人気No8
Kotlin
Kotlinのログ出力方法を完全ガイド!LogcatとTimberでトラブルシューティング