Go の例: 行フィルター

行フィルター とは、標準入力で読み取り、それを処理し、派生した結果を標準出力に出力する一般的なタイプのプログラムです。grepsed は一般的な行フィルターです。

すべての入力テキストを大文字で記述する Go の行フィルターの例を次に示します。このパターンを使用すると、独自の Go 行フィルターを作成できます。

package main
import (
    "bufio"
    "fmt"
    "os"
    "strings"
)
func main() {

バッファーされていない os.Stdin をバッファー付きスキャナーでラップすると、スキャナーを次のトークンに進める便利な Scan メソッドが得られます。スキャナーのデフォルトでは次の行です。

    scanner := bufio.NewScanner(os.Stdin)

Text は現在のトークン、ここでは次の行、を入力から返します。

    for scanner.Scan() {
        ucl := strings.ToUpper(scanner.Text())

大文字の行を書き出します。

        fmt.Println(ucl)
    }

Scan の間のエラーをチェックします。ファイルの終わりは想定されており、エラーとして Scan によって報告されません。

    if err := scanner.Err(); err != nil {
        fmt.Fprintln(os.Stderr, "error:", err)
        os.Exit(1)
    }
}

行フィルターを試すには、まず小文字の行をいくつか含むファイルを作成します。

$ echo 'hello'   > /tmp/lines
$ echo 'filter' >> /tmp/lines

次に、その行フィルターを使用して大文字の行を取得します。

$ cat /tmp/lines | go run line-filters.go
HELLO
FILTER

次の例: ファイルパス