Programa Go Conciso de Transformação de Texto

Beginner

This tutorial is from open-source community. Access the source code

Introdução

O laboratório de Filtros de Linha (Line Filters) é um tipo comum de programa que lê a entrada em stdin, processa-a e, em seguida, imprime algum resultado derivado em stdout. O objetivo deste laboratório é escrever um programa Go que lê texto de entrada e o modifica de acordo com requisitos específicos.

Filtros de Linha (Line Filters)

O problema a ser resolvido neste laboratório é escrever um programa Go que lê texto de entrada de stdin, capitaliza todas as letras no texto e, em seguida, imprime o texto modificado em stdout.

  • O programa deve ler o texto de entrada de stdin.
  • O programa deve capitalizar todas as letras no texto de entrada.
  • O programa deve imprimir o texto modificado em stdout.
## Para testar nosso filtro de linha, primeiro crie um arquivo com algumas
## linhas em minúsculas.
$ echo 'hello' > /tmp/lines
$ echo 'filter' >> /tmp/lines

## Em seguida, use o filtro de linha para obter linhas em maiúsculas.
$ cat /tmp/lines | go run line-filters.go
HELLO
FILTER

A seguir, o código completo:

// Um _filtro de linha_ é um tipo comum de programa que lê
// a entrada em stdin, processa-a e, em seguida, imprime algum
// resultado derivado em stdout. `grep` e `sed` são filtros de linha
// comuns.

// Aqui está um exemplo de filtro de linha em Go que escreve uma
// versão capitalizada de todo o texto de entrada. Você pode usar este
// padrão para escrever seus próprios filtros de linha em Go.
package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

func main() {

    // Envolver o `os.Stdin` sem buffer com um buffer
    // scanner nos dá um método `Scan` conveniente que
    // avança o scanner para o próximo token; que é
    // a próxima linha no scanner padrão.
    scanner := bufio.NewScanner(os.Stdin)

    for scanner.Scan() {
        // `Text` retorna o token atual, aqui a próxima linha,
        // da entrada.
        ucl := strings.ToUpper(scanner.Text())

        // Escreva a linha em maiúsculas.
        fmt.Println(ucl)
    }

    // Verifique se há erros durante o `Scan`. Fim do arquivo é
    // esperado e não relatado por `Scan` como um erro.
    if err := scanner.Err(); err != nil {
        fmt.Fprintln(os.Stderr, "error:", err)
        os.Exit(1)
    }
}

Resumo

O laboratório de Filtros de Linha (Line Filters) exige a escrita de um programa Go que lê texto de entrada de stdin, capitaliza todas as letras no texto e, em seguida, imprime o texto modificado em stdout. Este laboratório é uma ótima maneira de praticar a escrita de programas Go que leem e modificam texto de entrada.