golang的bufio包报错需要解释

package main


import (

  "bufio"

  "fmt"

  "os"

)


func main() {

  writeBuf := make([]byte, 1)


  fp, err := os.OpenFile("test.d", os.O_CREATE, 0777)

  bf := bufio.NewWriterSize(fp, 3)


  writeBuf = []byte("1")

  writeCount, err := bf.Write(writeBuf)

  fmt.Println(writeCount)


  writeBuf = []byte{'2'}

  writeCount, err = bf.Write(writeBuf)

  fmt.Println(writeCount)


  writeBuf = []byte{'3'}

  writeCount, err = bf.Write(writeBuf)

  fmt.Println(writeCount)


  writeBuf = []byte{'4'}

  writeCount, err = bf.Write(writeBuf)

  if err != nil {

    fmt.Println("Error4:", err)

    os.Exit(-1)

  }

  fmt.Println(writeCount)


  bf.Flush()

  fp.Close()


}

为什么这会给出错误:


 1

 1

 1

 Error4: write test.d: bad file descriptor

 exit status 255

我认为 NewWriterSize 为 3 意味着在写入三个字节后,输出被刷新。我在第 4 次写入时收到错误消息。如果我将 NewWriterSize 缓冲区大小更改为 4,它可以工作。为简洁起见,我省略了未报告错误的错误检查。


守着一只汪
浏览 100回答 1
1回答

HUWWW

您不检查从 os.OpenFile 返回的错误。我预计这是错误的,因为您需要在标志中使用 O_RDWR 或 O_WRONLY (如果您希望能够写入文件)。但是使用 os.Create 而不是 os.OpenFile 更容易,除非你真的需要 os.OpenFile 的 perm 选项。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go