// 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) } }