1、习惯defer close带来的问题
正常操作:
file, err := os.Create("file.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
但是close是返回error的
最优解-大佬的思考
2、我遇到的坑
我是按照上面最优解处理方式的关闭两次的方法
func doSomething() error {
f, err := os.Create("foo")
if err != nil {
return err
}
defer f.Close()
if _, err := f.Write([]byte("bar"); err != nil {
return err
}
if err := f.Close(); err != nil {
return err
}
return nil
}
但是由于close顺序的问题
1、f,err:=os.create(file)
2、f.write
3、操作(重新读取了file)
4、f.close
导致我在3的时候重新读取file的时候,file实际上还没有刷盘,导致每次的时候字节数都不一样。。。