为什么writer.Write(msg)无法写入os.Stdout?

  • 本文关键字:os Stdout writer Write msg go
  • 更新时间 :
  • 英文 :


在下面的代码中,为什么Write()操作不工作?

package main
import (
"fmt"
"bufio"
"os"
)
func main() {
fmt.Println("Hello, playground")
writer := bufio.NewWriter(os.Stdout)
//var msg []byte
msg := []byte{104, 101, 108, 108, 111, 10}
_, err := writer.Write(msg)
if err != nil {
fmt.Println("some error")
}
}

输出为:

Hello, playground

但应该是:

Hello, playground
hello

另外,我不想使用fmt.Println()。更具体地说,我将数据获取为[]byte类型

Cerise Limón在评论中指出,writer.Write()调用只是排队更多的数据写入(取决于缓冲区大小和数据量)。实际的写入可能稍后发生,或者永远不会发生。在您的例子中,由于您从未告诉写入器完成任何延迟的写入,因此没有写入发生。

您需要调用writer.Flush()(而不是writer.WriterFlush(),这是一种拼写错误)。如果写入失败,这可能会返回一个错误,所以理想情况下,您应该检查这一点,而不仅仅是defer调用并希望。然而,对于失败,你无能为力

您可以执行显式的、内联的错误检查,就像我在这里所做的那样,或者您可以延迟flush调用并丢弃任何错误。

相关内容

  • 没有找到相关文章