はじめに
ファイルに追記するプログラムを書いているときに、追記ではなく上書きされてしまうことがあり、勉強になったので書いておきます。
上書きされてしまうコード
os.WriteFileメソッドを使うと、ファイルの中身が上書きされてしまう。
package main
import (
"fmt"
"os"
)
func main() {
err := os.WriteFile("test.txt", []byte("Hello, World!"), 0644)
if err != nil {
fmt.Println(err)
return
}
}
追記できるコード
os.OpenFileメソッドで、os.O_APPENDフラグを付けると追記できるようになる。
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.OpenFile("test.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
_, err = file.WriteString("Hello, World!\n")
if err != nil {
fmt.Println(err)
return
}
}
動かしてみる
# 2回実行してみる
go run main.go
go run main.go
ファイルの中身
追記できている。
Hello, World!
Hello, World!