去os.Truncate()不重置文件光标

deb*_*0ch 0 go

我最近尝试使用os.Truncate参数0清除文件的内容,然后将修改后的版本重写(我知道这是一种非常不安全的做法,但文件的内容对我来说并不重要).

令我震惊的是Truncate没有重置文件的光标,所以当我写回文件时,我最后得到一个前缀为一堆空字节的文件(对应于前面内容的大小),除非我使用file.Seek(0, 0)预先.

所以我的问题是:这是一个语言的错误,在实现该功能时被遗忘的东西,还是故意的,并且出于某种神秘的原因它是一种理想的行为?这可能是什么神秘的原因?

我正在使用go版本go1.3.3 linux/amd64

Tim*_*per 6

这是期望的行为:Go实现模仿C的工作原理*.从ftruncate(2)的手册页:

文件偏移量不会更改.

*从技术上讲,这是因为Go实现执行了ftruncate(2)系统调用.