7章型、メソッド、インタフェース

前の章までで見てきたように、Goは組み込みの型とユーザーが定義する型によって、静的に型付けされる言語です。そして、この章で見るように、Go言語ではメソッドを定義し、型と結びつけることができます。さらに、型を「抽象化」する機能もあり、実装を明示的に記述せずにメソッドを呼び出すコードを書くこともできます。

ただし、メソッド、インタフェース、型といったものに対するGoのアプローチは、ほかの言語とは大きく異なっています。Goでは継承(inheritance)ではなく、合成(composition)を推奨しています。これは、ソフトウェア工学における最近の潮流を反映したものです。この章では、型、メソッド、インタフェースについて説明し、それを使ってどのようにテスト可能で保守が容易なプログラムを作っていくのかを説明します。

7.1 Goの型

型(type)やこれに関連する概念について議論するために、まずいくつか用語を定義しておきましょう。

7.1.1 抽象型と具象型

型に関して、抽象型 (abstract type)具象型 (concrete type)という分類があります。抽象型は型が何をするものかを定義しますが、それをどのようにするかは規定しません。つまり、抽象型では実装を提供しません(あるいは不完全な実装しか提供しません)。これに対して具象型は何をどのようにするかを規定します。つまり、データの記憶のされ方を規定した上で、型に付随して定義されるメソッドの実装を提供します。

Go言語で使われるすべての型は、抽象型か具象型のいずれかです。言語によってはハイブリッド型を許容します。たとえばJavaのデフォルトメソッドをもったインタフェースや抽象クラスがこの例です。 ...

Get 初めてのGo言語 ―他言語プログラマーのためのイディオマティックGo実践ガイド now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.