[ Golang ] 複数の出力先に対して、まとめて書き込みをする方法: io.MultiWriter

この記事は約3分で読めます。

今回は、 Golang で

「複数の出力先に対して、まとめて書き込みをする方法」

をご紹介しようと思います。

io.MultiWriter

今回の主役はioパッケージにある、MultiWriterメソッドです!

io.MultiWriterは、複数のio.Writerに対し、同じ内容を送ることができます

Example

main.go

package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	var str string
	fmt.Scan(&str)
	file, err := os.Create("test.text")
	if err != nil {
		panic(err)
	}
	writers := io.MultiWriter(os.Stdout, file)
	writers.Write([]byte("input:"str))
}

解説

流れは、

  1. 標準入力を読み込む
  2. ファイルを作る
  3. 標準入力できた文字列を標準出力とファイルに書き込んでいます。

実行1

$go run main.go
hogehoge
input:hogehoge

となります
同じディレクトリに,test.txtが生成されていて、その中身にも,input:hogehogeと書かれています。

 

実行2

$go build -o multi-writer main.go
$ echo "aaaaaaaaaaaaaaa" | grep ./multi-writer 
input:aaaaaaaaaaaaaaa
$cat test.txt
input:aaaaaaaaaaaaaaa

このように、パイプで渡して、標準入力を受け取ることができるので、shellを扱うときに便利なツールを作成する手助けをしてくれます。

まとめ

今回は、io.MultiWriterについて、学びました。

fmtやos.File、ウェブアプリで使うnet.Connも

実は、io.Writerです!

なので、出力先が複数ありまとめて書き込みたい時は、MultiWriterを使ってみましょう!

合わせて読みたい

参考文献

io - The Go Programming Language
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

 

 

タイトルとURLをコピーしました