unix - 如何使用管道在 Go 中写入 `cat`

标签 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])
        }
    }
}

最佳答案

您可以使用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)
    }
}

关于unix - 如何使用管道在 Go 中写入 `cat`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11799692/

相关文章:

linux - grep 交替搜索

linux - Unix 和 Linux 文件并发读/写处理

compiler-construction - Go1 编译器是如何工作的?

elasticsearch - 从 elasticsearch 查询返回所有文档

api - 如何在golang中动态编写http.HandleFunc()?

linux - 如何协调两个linux进程以两步锁步计划运行?

c - C 编程中如何调用变量指定 printf 的格式

mongodb - 哪个库更高效“gopkg.in/mgo.v2”或“go.mongodb.org/mongo-driver/mongo”

linux - "All"和 "Bot"在 vi​​m 状态行中意味着什么?

go - 在设置 Hyperledger 开发环境和网络时获取 grpc 超时