为了账号安全,请及时绑定邮箱和手机立即绑定

golang的bufio包报错需要解释

golang的bufio包报错需要解释

Go
守着一只汪 2022-10-31 16:22:39
package mainimport (  "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,它可以工作。为简洁起见,我省略了未报告错误的错误检查。
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

您不检查从 os.OpenFile 返回的错误。我预计这是错误的,因为您需要在标志中使用 O_RDWR 或 O_WRONLY (如果您希望能够写入文件)。但是使用 os.Create 而不是 os.OpenFile 更容易,除非你真的需要 os.OpenFile 的 perm 选项。



查看完整回答
反对 回复 2022-10-31
  • 1 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信