Go初心者のファイル操作入門
Go初心者のためのファイル操作入門
Goでファイルを扱う基本は、osパッケージとio/ioutilパッケージにあります。ファイル読み書きはプログラムの外部データを扱う際に頻繁に出てくるので、まずはシンプルな例から始めましょう。
os.Openとos.Createでファイルを開く
読み込み専用でファイルを開くにはos.Open、新規作成または上書きで開くにはos.Createを使います。戻り値は*os.Fileとerrorです。
package main
import (
"fmt"
"os"
)
func main() {
f, err := os.Open("input.txt")
if err != nil {
fmt.Println("open error:", err)
return
}
defer f.Close()
// ここでファイルを読み込む
}
ioutil.ReadFileで簡単に読み込む
小さめのファイルならioutil.ReadFileで一度に全内容を取得できます。戻り値は[]byteとerrorです。
data, err := ioutil.ReadFile("input.txt")
if err != nil {
fmt.Println("read error:", err)
return
}
fmt.Println(string(data))
bufioを使った高速読み書き
大きなファイルやストリーム処理ではbufioを使うと効率的です。bufio.Readerとbufio.Writerでバッファリングを行います。
reader := bufio.NewReader(f)
line, err := reader.ReadString('\n')
if err != nil {
// EOF などを処理
}
fmt.Println(line)
Closeとエラー処理でリソース管理を徹底
ファイルを開いたら必ずCloseでリソースを解放します。deferを使うと関数終了時に自動でクローズされます。エラー処理は必ず行い、失敗時に適切にログを出力しましょう。
f, err := os.Create("output.txt")
if err != nil {
fmt.Println("create error:", err)
return
}
defer func() {
if cerr := f.Close(); cerr != nil {
fmt.Println("close error:", cerr)
}
}()
_, err = f.WriteString("Hello, Go!")
if err != nil {
fmt.Println("write error:", err)
}
コメント
コメントを投稿