April 2022
Beginner to intermediate
464 pages
6h 44m
Japanese
Goの標準ライブラリに含まれるio.ReadWriterは次のように宣言されています。これは構造体の埋め込みと似たような記法です。この場合はio.Readerが満たすべきインタフェース(Read()メソッド)と、io.Writerが満たすべきインタフェース(Write()メソッド)の両方を満たさなければならないインタフェースになります。
type ReadWriter interface {
Reader
Writer
}

Javaを知っている読者には「Javaのインタフェースの多重継承と同じ」と言えばわかりやすいでしょう。
Goのエコシステムでは、なるべく最小のインタフェースを定義し、それを組み合わせたインタフェースを合成して利用します。ただし、それは言語的な制約のせいでもありました。バージョン1.13までのGoでは、合成するインタフェースに重複するメソッドがあるとエラーになっていました。Go 1.14以降はエラーではなくなったので、エラー回避のために細かくインタフェースを区切る必要はなくなりました。
それでも、必要最小限のメソッドを持ったインタフェースを使う方が、依存関係がクリアになり、また少ないメソッド定義だけで利用できるので便利です。必要以上にメソッドが多いインタフェース(制約の厳しいインタフェース)は使わない方が良いでしょう。
たとえば、外部からの読み込みにio.ReadSeeker1を指定したとします。ここに、HTTPリクエストのボディを渡した場合にはエラーとなって利用できません。一度コンテンツをメモリに展開し、すべてのインタフェースを満たした ...
Read now
Unlock full access