如何在Golang中同时读取标准输入和标准输出的多路输入输出数据?

在Golang中,可以使用标准库中的`io`包和`os`包来实现多路输入输出的数据处理,典型的做法是通过`io.MultiWriter`或使用`goroutine`并结合`bufio.Scanner`进行并发读取和写入操作。

以下是一个简单的例子,展示如何同时读取标准输入的数据并将其输出到标准输出和一个文件中:

```go
package main

import (
"bufio"
"fmt"
"io"
"os"
)

func main() {
// 打开输出文件
file, err := os.Create("output.txt")
if err != nil {
fmt.Println("打开文件失败:", err)
return
}
defer file.Close()

// 创建一个多路输出(同时输出到标准输出和文件)
multiWriter := io.MultiWriter(os.Stdout, file)

// 使用bufio.Scanner从标准输入读取数据
scanner := bufio.NewScanner(os.Stdin)
fmt.Println("请输入一些文本(按Ctrl+D结束输入,Windows用户按Ctrl+Z):")

for scanner.Scan() {
// 获取当前行输入
line := scanner.Text()

// 将输入内容同时写入标准输出和文件
_, err := multiWriter.Write([]byte(line + "
"))
if err != nil {
fmt.Println("写入失败:", err)
return
}
}

// 检查扫描器是否有错误
if err := scanner.Err(); err != nil {
fmt.Println("读取标准输入时出错:", err)
}
}
```

运行程序后,用户可以在终端输入文本,程序会将输入的每一行同时显示在屏幕上并写入到文件`output.txt`中。输入结束的方式是在Unix系统上按`Ctrl+D`,在Windows系统上按`Ctrl+Z`加回车。

上述代码展示了如何使用Golang进行多路输入输出操作,适合处理简单的数据转发需求或日志分发等场景。

若文章对您有帮助,帮忙点个赞!

0
0
发布时间 2025-03-13 14:42:09
0 条回复(回复会通过微信通知作者)
点击加载更多评论
登录 后再进行评论
(微信扫码即可登录,无需注册)