Goで標準入力とファイル入力を引数に応じて受け取り方を切り替える方法
grep 検索ワードとだけだと、検索は標準入力を対象に行う grep 検索ワード infile.txtだと、検索はinfile.txtを開いて行う
sedも同様に、置換対象ファイルの指定がないと標準入力を受け取る
これにより、下記のようなパイプ処理や、単体での実行が可能になる
code:bash
cat infile.txt | grep foobar
grep foobar infile.txt
cat infile.txt | sed 's/foo/FOO/g'
sed 's/foo/FOO/g' infile.txt
これをGoで実装するならどうやるか?
下記のような実装になる
code:main.go
// 引数が1個の場合はファイルからデータ読み取り
// 引数が0個の場合は標準入力からデータ読み取り
var (
r *os.File
)
if len(args) < 2 {
r = os.Stdin
} else {
var err error
if err != nil {
return nil, err
}
defer r.Close()
}
sc := bufio.NewScanner(r)
for sc.Scan() {
line := sc.Text()
// TODO...
}
そうでなければファイルをOpenしてreaderとして扱う