【发布时间】:2016-04-18 13:30:28
【问题描述】:
我有以下函数来压缩字节数组:
func compress(input []byte) []byte {
var buf bytes.Buffer
compr := gzip.NewWriter(&buf)
compr.Write(input) // here it appears to hang until
// Enter is pressed
compr.Close()
output := buf.Bytes()
return output
}
函数偶尔会挂起。当我按 [Enter] 时,该功能将继续并返回预期结果。我在这里遗漏了什么吗?
即使给出相同的输入,它也会挂起大约五次。我用gzip还是zlib都没有关系。
我在 Linux x86_64 上使用 go 1.6
【问题讨论】:
-
你真的应该养成检查错误的习惯。您确定您的代码挂起,而不仅仅是您的终端没有刷新吗?
-
@icza:我在每一行之后添加了一个打印语句来检查。有时它只会打印紧跟在
compr := gzip.NewWriter(&buf)之后的语句。终端未挂起;光标会急切地闪烁,直到我按下 Enter 键,这恰好被输入下一个需要用户输入的函数。在这种特殊情况下,还有其他方法可以检查错误吗? -
您能否提供一个MCVE 仍然会产生您的问题?
-
@icza:不需要。你为我指明了正确的方向。使用不同的终端仿真器(konsole),我无法重现该错误。错误的终端是终结者。你的第一个猜测恰好是正确的。 - 谢谢