Goのbytes.Buffer

バイト列のバッファリングを扱う構造体でよくでてくるやつ。

疑問に思ったのは、io.Writerやio.Reader型のメソッドの引数に渡せること。「Goはインターフェースが大事!」というのを理解するまでは違和感があった。

こんなコード。引数の型がio.Writerで、byres.Buffer型の変数をNewに渡している。

最初見たら凄く気持ちが悪い^_^

func New(w io.Writer) Tracer { ...}

var buf bytes.Buffer
tracer := New(&buf)

調べたら簡単な話で、bytes.BufferがWrite()とRead()メソッドを実装しているので、

io.Writerとio.Readerインターフェースを満たすことになる。

go.googlesource.com