You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言使用bufio.Writer写入文件后内容为空是什么原因?

问题根因

文件为空由两处错误共同导致:

  • 调用os.OpenFile时传入的打开标志缺少写权限,你当前仅使用了os.O_CREATE|os.O_APPEND,没有追加os.O_WRONLY(只写)或者os.O_RDWR(读写)标志,操作系统会拒绝向该文件句柄写入数据
  • bufio.Writer是带内存缓冲的写入器,循环内所有写入操作只是把数据存到了内存缓冲区,你没有调用Flush()方法把缓冲区数据真正刷写到磁盘,程序退出后缓冲内的数据会直接丢失

补充说明:你能看到文件被正常创建,是因为O_CREATE标志只要求进程有对应目录的写权限即可创建文件,和打开的文件句柄本身是否拥有写权限无关。

修复方案

修改打开文件的标志,并且在写入逻辑结束后主动刷写缓存,修改后的代码如下:

// 新增os.O_WRONLY标志,开启写权限
file, err := os.OpenFile("filename.db", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
if err != nil {
    log.Fatal(err)
}
defer file.Close()
res := 0
writer := bufio.NewWriter(file)
// 新增defer Flush,确保程序退出前把缓冲数据刷到磁盘
defer writer.Flush()

for _, data := range manager {
    bin, err := json.Marshal(data)
    if err != nil {
        log.Println(err)
        return
    }
    res++
    if debug {
        log.Println(res)
    }
    fmt.Printf("%s\n", bin)
    _, err = writer.Write(bin)
    if err != nil {
        log.Println(err)
    }
    _, _ = writer.WriteRune('\n')
}

内容的提问来源于stack exchange,提问作者Wynell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 21:39:00