Filtri di Linea
Un programma filtro in Unix legge da standard input, processa i dati letti e scrive il risultato a standard output.
Sono moltissime le utility Unix/Linux che si comportano in questo modo.
(580line-filters.go):
// Legge stdin, lo processa e scrive stdout
// Esempio che trasforma in maiuscole
package main
import ("bufio"; "fmt"; "os"; "strings")
func main() {
// Input bufferizzato fino a fine linea
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
// Text ritorna il token corrente
// che qui è l'intere linea
ucl := strings.ToUpper(scanner.Text())
fmt.Println(ucl)
}
// Controllo errori. EOF non è un errore
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "error:", err)
os.Exit(1)
}
}
L'oggetto che legge da standard input è uno scanner bufferizzato.
La funzione Scan
legge finchè non trova lo End Of File (EOF - di solito Ctrl-D), bufferizzando ogni linea, delimitata da newline ('\n').
La funzione Text
ritorna l'intera linea.
La funzione Err
verifica se vi sono stati errori di scansione.