【Go】ファイルに追記したいときは、os.OpenFileメソッドでos.O_APPENDフラグを使おう

Go

はじめに

ファイルに追記するプログラムを書いているときに、追記ではなく上書きされてしまうことがあり、勉強になったので書いておきます。

上書きされてしまうコード

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!

参考