6 votes

Comment écrire `cat` en Go en utilisant des pipes

J'ai une implémentation de l'outil Unix cat ci-dessous. Il lit un certain nombre d'octets dans os.Stdin dans une mémoire tampon, puis écrit ces octets sur os.Stdout . Existe-t-il un moyen d'ignorer le tampon et de se contenter d'un tuyau ? Stdin directement à Stdout ?

package main

import "os"
import "io"

func main() {
    buf := make([]byte, 1024)

    var n int
    var err error
    for err != io.EOF {
        n, err = os.Stdin.Read(buf)

        if n > 0 {
            os.Stdout.Write(buf[0:n])
        }
    }
}

11voto

Staven Points 2865

Vous pouvez utiliser io.Copy() (Documentation ici)

Ejemplo:

package main

import (
    "os"
    "io"
    "log"
)

func main() {
    if _, err := io.Copy(os.Stdout, os.Stdin); err != nil {
        log.Fatal(err)
    }
}

5voto

peterSO Points 25725

Par exemple,

package main

import (
    "io"
    "os"
)

func main() {
    io.Copy(os.Stdout, os.Stdin)
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X