私がはじめわからなかった、os.OpenFile関数のフラグについて少し書きます
#Goのファイル開閉の種類
Goにはファイル読み書きの際のファイルの開き方にいくつか方法がありますよね。
os.Create
、os.NewFile
、os.Open
、os.OpenFile
です。
そのうちOpenFileを使うと、引数にフラグを渡すことで、ファイルを開く際の大まかな設定ができます。
がっつり調べたらドキュメントに言及されてるんですが、Qiitaに記事があるとわかりやすいですよね!(そうですよね!??)
##os.OpenFileの基本
os.OpenFile
を使うときは第二引数に、用途に合わせてフラグを渡す必要があります
-
os.O_RDONLY
//読み込む時 -
os.O_WRONLY
//書き込む時 -
os.O_RDWR
//読み書き両方する時
なお、第二引数に複数フラグを渡す場合は | で区切って渡してあげましょう。
とりあえず最後まで読み進めてみてください。
##ファイルに追記がしたい!
基本的に何も考えずファイルを開いて書き込むと中身を全部上書きして書き込まれますよね。
追記したいときはos.OpenFile
の第二引数にos.O_WRONLY
及びos.O_APPEND
をつけましょう。
import(
"os"
)
func main() {
//引数: ファイルのパス, フラグ, パーミッション(わからなければ0666でおっけーです)
file, err := os.OpenFile("test.txt", os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
//エラー処理
log.Fatal(err)
}
defer file.Close()
fmt.Fprintln(file, "書き込み〜!") //書き込み
}
##ファイルが存在しなかった場合新規作成したい!
何も考えずにos.OpenFile()
を使うと、もともとファイルが存在しなかった場合、エラーが発生します。
存在しなかった場合新規ファイルを作成する場合はos.OpenFile
の第二引数にos.O_CREATE
をつけましょう。
func main() {
file, err := os.OpenFile("test.txt", os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
//エラー処理
log.Fatal(err)
}
defer file.Close()
fmt.Fprintln(file, "書き込み〜!") //書き込み
}
##おさらい
では、ファイルに追記する、__存在しなかったら新規作成する__を両方使ってみましょう。
func main() {
//os.O_RDWRを渡しているので、同時に読み込みも可能
file, err := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
//エラー処理
log.Fatal(err)
}
defer file.Close()
fmt.Fprintln(file, "書き込み〜") //書き込み
}
以上です。
このほかにもコアなものがいくつかあるので、詳しくはご自分で調べて見てください〜!
参考: http://golang.jp/pkg/os