|
Строковый фильтр — это распространённый тип программы,
которая читает ввод из 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)
}
}
|