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.