io.Reader?去年のアドベントカレンダーではGo4までだったのが今年はなんとGo7までできており、Goへの関心が高まっているのはいちGo好きとしてはうれしい限りです。いった側面はしばしばGoの良さとして語られますし私自身もそれには同意します。一方でそれらのわかりやすい利点の裏に隠れてしまっている影の立役者がいると思っています。それこそが`io.Reader`です。その使い方を正しく理解するだけで**Goのインターフェースという仕組みの強力さがわかる素晴らしいインターフェースのお手本**であると思っています。io.Readerって?一言で言ってしまえば**バイト列を読み出すためのインターフェース**です。触れたことがあると思います。Goを書いていれば様々な場所で出てきます。インターフェースを持っています。複合的なインターフェースです。以下のように定義されています(コメント略)。error)}```初めてこの定義を見る方は「え、たったこれだけ?」と思われるかもしれませんが、これだけです。Goの様々な場面で出てくるという主張に納得していただけるのではないかと思います。メソッドがどういった振る舞いをするのかは自明ではないでしょう。メソッドを叩かなくて済むように様々な仕組みを提供しているため裏で何が行われているのかを知る機会があまりないのではないかと思います。渡して全部まるっと読んでしまえばよかったりするわけです。介するAPI設計は重宝されます。メソッドが何をするか(することを期待されるか)を手続き的にご説明します。