Go by Example:逐行篩選器

逐行篩選器是常見的程式類型,以 stdin 讀取輸入資料,處理輸入資料,並將衍生結果印出到 stdout。常見的逐行篩選器有 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 執行期間的錯誤。檔案尾 (End of file) 是可預期的,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

下一個範例:檔案路徑