Go на примерах: Строковые фильтры

Строковый фильтр — это распространённый тип программы, которая читает ввод из stdin, обрабатывает его и затем выводит производный результат в stdout. grep и sed — распространённые строковые фильтры.

Вот пример строкового фильтра на 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

Далее: .