为了账号安全,请及时绑定邮箱和手机立即绑定

从标准输入接收二进制数据,发送到 Go 中的通道

从标准输入接收二进制数据,发送到 Go 中的通道

Go
梵蒂冈之花 2021-07-08 14:19:20
所以我有以下测试 Go 代码,该代码旨在通过 stdin 从二进制文件中读取,并将读取的数据发送到通道(然后在通道中进行进一步处理)。在我在这里给出的版本中,它只从 stdin 读取前两个值,尽管就显示问题而言这很好。package mainimport (    "fmt"    "io"    "os")func input(dc chan []byte) {    data := make([]byte, 2)    var err error    var n int    for err != io.EOF {        n, err = os.Stdin.Read(data)        if n > 0 {            dc <- data[0:n]        }    }}func main() {    dc := make(chan []byte, 1)    go input(dc)    fmt.Println(<-dc)}为了测试它,我首先使用 go build 构建它,然后使用命令向它发送数据 -./inputtest < data.bin我目前用来测试的数据只是使用 openssl 命令创建的随机二进制数据。我遇到的问题是它错过了 Stdin 的第一个值,只给出了第二个和更大的值。我认为这与频道有关,因为删除频道的相同脚本会产生正确的数据。有没有人遇到过这个?例如,我在运行此命令时得到以下输出 -./inputtest < data.bin[36 181]而我应该得到-./inputtest < data.bin[72 218](两种情况下的二进制数据相同。)
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 254 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信