渡されたio.Writerに書き込むようにする通常はos.Stdout、テストの時はbytes.Bufferを渡すどちらもio.Writerを実装している標準出力への書き込みをテストしたいfmt.Print等で文字列を出力する場合、予期したものが出力されるかをテストしたい場合があります。fmt.Printはそのまま出力まで行ってしまうらしく、こちら側で制御することは難しそうです。このような場合、fmt.Printを使うのではなく、明示的に標準出力へ書き込むようにし、テストの時は書き込み先を切り替えることで簡単にテストができるようになります。fmt.Fprintで出力先を指定するgolangでは任意の書き込み先に対して書き込むfmt.Fprint関数が用意されています。この関数は、io.Writerに対してフォーマット指定した文字列を書き込めます。error)関数だけを持ったインターフェースです。そのため、これを実装していればfmt.Fprintの書き込み先として使えます。http://golang.org/pkg/io/#Writergolangでは、io.Writerを実装した標準出力をos.Stdoutとして提供しています。出力先を変更可能な状態で標準出力に出力できます。メモリ上に出力するgolangでは、byets.Bufferもio.Writerを実装しており、こちらは書き込まれた文字列をメモリ上に保持してくれます。String()関数により、書き込まれた文字列をstringとして取得できます。標準出力に出力されたかどうかをテストすることができるようになります。ota42yC++/Ruby/RoR/golang/rust/flutter。