在下面的代码中,为什么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调用并丢弃任何错误。