如何使用管道在Go中编写`cat`

时间:2012-08-03 16:28:27

标签: unix go

我在下面有一个Unix工具cat的实现。它从os.Stdin读取一些字节到缓冲区,然后将这些字节写入os.Stdout。有没有办法可以跳过缓冲区并直接将Stdin传送到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])
        }
    }
}

2 个答案:

答案 0 :(得分:11)

您可以使用io.Copy() (Documentation here)

示例:

package main

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

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

答案 1 :(得分:5)

例如,

package main

import (
    "io"
    "os"
)

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