Go 从命名管道读取数据';t给出任何输出并无限期地阻塞代码

Go 从命名管道读取数据';t给出任何输出并无限期地阻塞代码,go,ipc,Go,Ipc,我写了一段有IPC用途的代码。预期的行为是代码从命名管道读取内容并打印字符串(使用Send(“log”,buff.string()))。首先,我打开goroutine中的命名管道“reader”,当读卡器打开时,我发送一个信号,表示可以将数据写入命名管道(使用send(“datarequest”)发送(“datarequest”))。代码如下: var wg sync.WaitGroup wg.Add(1) go func() { //reader part file, err

我写了一段有IPC用途的代码。预期的行为是代码从命名管道读取内容并打印字符串(使用
Send(“log”,buff.string())
)。首先,我打开goroutine中的命名管道“reader”,当读卡器打开时,我发送一个信号,表示可以将数据写入命名管道(使用
send(“datarequest”)发送(“datarequest”)
)。代码如下:

var wg sync.WaitGroup
wg.Add(1)

go func() {
    //reader part
    file, err := os.OpenFile("tmp/"+os.Args[1], os.O_RDONLY, os.ModeNamedPipe)
    if err != nil {
        Send("error", err.Error())
    }

    var buff bytes.Buffer
    _, err = io.Copy(&buff, file)

    Send("log", buff.String())

    if err != nil {
        Send("error", err.Error())
    }

    wg.Done()
}()

Send("datarequest", "")
wg.Wait()
这是发送信号时执行的代码:

    //writer part
    file, err := os.OpenFile("tmp/" + execID, os.O_WRONLY, 0777)

    if err != nil {
        c <- "[error] error opening file: " + err.Error()
    }

    bytedata, _ := json.Marshal(moduleParameters)
    file.Write(bytedata)
//编写器部分
文件,err:=os.OpenFile(“tmp/”+execID,os.O_WRONLY,0777)
如果出错!=零{

c编写器应该在文件发送完成后使用
file.close()
关闭文件。注意
file.close()
可能会返回错误。

哦,这是一种字符串类型,我不知道为什么要这样做两次