42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
// A _line filter_ is a common type of program that reads
|
|
// input on stdin, processes it, and then prints some
|
|
// derived result to stdout. `grep` and `sed` are common
|
|
// line filters.
|
|
|
|
// Here's an example line filter in Go that writes a
|
|
// capitalized version of all input text. You can use this
|
|
// pattern to write your own Go line filters.
|
|
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
func main() {
|
|
|
|
// Wrapping the unbuffered `os.Stdin` with a buffered
|
|
// scanner gives us a convenient `Scan` method that
|
|
// advances the scanner to the next token; which is
|
|
// the next line in the default scanner.
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
|
|
for scanner.Scan() {
|
|
// `Text` returns the current token, here the next line,
|
|
// from the input.
|
|
ucl := strings.ToUpper(scanner.Text())
|
|
|
|
// Write out the uppercased line.
|
|
fmt.Println(ucl)
|
|
}
|
|
|
|
// Check for errors during `Scan`. End of file is
|
|
// expected and not reported by `Scan` as an error.
|
|
if err := scanner.Err(); err != nil {
|
|
fmt.Fprintln(os.Stderr, "error:", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|