Le Go par l'exemple: Filtres de lignes

Un filtre de ligne est un type de programme courant qui lit des entrées sur stdin, les traite, puis affiche un resultat dérivé sur stdout. grep et sed sont des exemples de filtres de ligne.

Voici un filtre de ligne en Go qui met en majuscule tout le texte d’entrée. Vous pouvez utilisez ce modèle pour écrire vos filtres de lignes en Go.

package main
import (
    "bufio"
    "fmt"
    "os"
    "strings"
)
func main() {

On encadre os.Stdin qui n’a pas de buffer, avec un scanner qui en a un. Il nous fournit en outre une méthode pratique Scan qui avance la lecture jusqu’à la marque suivant, c’est à dire ici la ligne suivante dans le scanner par défaut.

    scanner := bufio.NewScanner(os.Stdin)

Text renvoie la zone de texte courante, ici une ligne du texte d’entrée.

    for scanner.Scan() {
        ucl := strings.ToUpper(scanner.Text())

On affiche la ligne en majuscules.

        fmt.Println(ucl)
    }

On teste les erreurs durant Scan. Un caractère de fin de fichier est attendu et si on en trouve pas, il est reporté par Scan comme une erreur.

    if err := scanner.Err(); err != nil {
        fmt.Fprintln(os.Stderr, "error:", err)
        os.Exit(1)
    }
}

Pour essayer notre filtre de ligne, commencez par créer un fichier avec quelques lignes en minuscule.

$ echo 'hello'   > /tmp/lines
$ echo 'filter' >> /tmp/lines

Puis utilisez le filtre de ligne pour les mettre en majuscule.

$ cat /tmp/lines | go run line-filters.go
HELLO
FILTER

Exemple suivant: Arguments de ligne de commande.