はじめに Goにおける抽象化の方法にインターフェースがあります。インタフェースをうまく使うことにより具体的な実装を隠し、疎結合な実装ができるようになります。 これにより、テストがやりやすくなったり、リファクタリングの影響範囲を小さくできるなどのメリットがあります。インターフェースがないコードは振る舞いで共通化することができないため、冗長かつ密結合なシステムになってしまいます。 今回はGoのインターフェースの基本的な考え方である "Accept interfaces, Return structs" について紹介します。 "Accept interfaces, Return structs" とは 直訳で 「インターフェースを受け入れて、構造体を返す」 ですが、この考え方はJack Lindamood氏が過去に提案したものです。 GoのCodeReviewのドキュメントには以下のように書かれ
![GoのInterfaceの作法 "Accept Interfaces, Return structs" - y-zumiの日記](https://cdn-ak-scissors.b.st-hatena.com/image/square/c06d7f1313dea6ba6f19ce06999b20e265861947/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fy%2Fy-zumi%2F20190728%2F20190728023343.jpg)