たとえば、
aaaaaaaaa
という内容のテキストファイルがあった時、これを上書き指定してファイルオープンしてbbbという文字列を書き出すと、
bbbaaaaaa
となる。
確実に書き換えるならtmpファイルを作成してリネーム操作する。おそらく作成日時も更新される。gitなどでそのテキストファイルをバージョン管理しているならそのあたりの支障はないかもしれないが、少しなじめない…。
対策や、この仕様についての情報などありましたら、コメントでお教え下さると幸いです。
広告
2018/4/23追記: O_TRUNCについて
どうやらファイルオープンする際にOpenFileにO_TRUNCを追加していなかったのが原因の模様。
O_TRUNCを追加しておくと、書き込み先ファイルが存在したときにその内容を消し、そのあと出力する形になる。つまり、中身を消した上で上書きするのである。
Open関数だけだとこのフラグが渡されていない。Create関数はこのフラグが渡されている。このため、より希望の動作をさせたい場合はos.OpenFile関数を使ったほうが良い。