7章型、メソッド、インタフェース
前の章までで見てきたように、Goは事前宣言された型(組み込みの型)とユーザーが定義した型の両方をもつ静的に型付けされた言語です。そして、この章で見るように、Go言語では型にメソッドを定義し付随させることができます。さらに、型を「抽象化」する機能もあり、実装を明示的に記述せずにメソッドを呼び出すコードを書くこともできます。
ただし、メソッド、インタフェース、型といったものに対するGoのアプローチは、ほかの言語とは大きく異なっています。Goでは継承(inheritance)ではなく、合成(composition)が推奨されます。これは、ソフトウェア工学における最近の潮流を反映したものです。この章では、型、メソッド、インタフェースについて説明し、こうしたものを使って「テスト可能で保守が容易なプログラム」をどのように作っていくかを見ていきます。
7.1 Goの型
型(type)やこれに関連する概念について議論するために、まずいくつか用語を定義しておきましょう。
7.1.1 抽象型と具象型
型に関して、抽象型(abstract type)と具象型(concrete type)という分類があります。抽象型は型が何をするものかを定義しますが、それをどのようにするかは規定しません。つまり、抽象型では実装を提供しません(あるいは不完全な実装しか提供しません)。これに対して具象型は何をどのようにするかを規定します。つまり、データの記憶のされ方を規定した上で、型に付随して定義される「メソッド」の実装を提供します。
Go言語で使われるすべての型は、抽象型か具象型のいずれかです†1。
[†1] 言語によってはハイブリッド型を許容します。たとえばJavaのデフォルトメソッドをもったインタフェースや抽象クラスがこの例です。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access