// _Строковый фильтр_ - это типичный тип программы, // которая читает входные данные в stdin, обрабатывает // их и затем выводит некоторый производный результат в // стандартный вывод. `grep` и `sed` - это обычные строковые // фильтры. // Вот пример строкового фильтра в Go, который записывает // заглавную версию всего входного текста. Вы можете // использовать этот шаблон для написания ваших собственных // фильтров Go. package main import ( "bufio" "fmt" "os" "strings" ) func main() { // Обертывание небуферизованного `os.Stdin` буферизованным // сканером дает нам удобный метод сканирования `Scan`, // который продвигает сканер к следующему токену; который // является следующей строкой в сканере по умолчанию. scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { // `Text` возвращает текущий токен, из ввода - на // следующую строку. 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) } }