【发布时间】:2021-06-24 13:11:51
【问题描述】:
我有代码并且它以正确的方式工作,但在这些行中它不是线程安全的https://play.golang.org/p/8EY3i1Uk_aO 比赛在这里发生。
stdout := cmd.Stdout.(*bytes.Buffer).String()
stderr := cmd.Stderr.(*bytes.Buffer).String()
我是这样重写的
readout, _ := cmd.StdoutPipe()
readerr, _ := cmd.StderrPipe()
链接 https://play.golang.org/p/htbn2zXXeQk
我不喜欢这里使用MultiReader,我无法将数据标准输出与标准错误分开
r, _ := bufio.NewReader(io.MultiReader(readout, readerr)).ReadString('\n')
第二个例子也不行(在代码中有注释)。我希望 stdout 不是空的(就像这里 https://play.golang.org/p/8EY3i1Uk_aO)
如何让逻辑和第一个例子一样,但它应该是线程安全的?
【问题讨论】:
-
I don’t like that MultiReader is used here- 那为什么要使用它呢?您可以分别从两个流中读取。 -
你第一个操场代码play.golang.org/p/8EY3i1Uk_aO 显示空标准输出结果
-
@Emile Pels,由于某种原因,它没有从两个线程中读取,它在阅读器上冻结,我知道这是因为那里没有写任何东西