golangでは、ファイルを読み書きする時にはioutilというパッケージ機能を使うのが一般的です。
iouitlについて、少しまとめてみました。
###想定読者
golang初学者(メソッドの引数とか戻り値とか、:=の意味はソースを見てわかるレベル)
###ioutilって何?
「io」はデータの読み書き、「util」はutility(有用性)の略です。
つまり、データの読み書きに必要な機能をまとめたパッケージです。
一つ一つの機能を組み合わせてエラーハンドリングとか実装できない(そもそも忘れちゃう)プログラマでも
簡単にファイルの読み書きができるような機能をioutilというパッケージでを用意してあげたよ!便利でしょ!って感じ。
##どんな機能があるの?
###ファイルの生成機能(WriteFile)
func WriteFile(filename string, data []byte, perm os.FileMode) error {
...
}
ファイルの生成には、WriteFileファンクションを使います。
ファイル名を第一引数、ファイルの中身を第二引数、ファイルに対するパーミッションを第3引数に渡します。
パーミッションについては、Windowsは特に気にしなくてよいようです。(適当に0を渡す)
例えば、HELLO WORLDという文字が書かれた、sample.txtを生成したい場合には、第一引数に"sample.txt"、第二引数に"HELLO WORLD"を[]byteに変換したものを渡せばよいです。
err := ioutil.WriteFile("sample.txt", []byte("HELLO WORLD"), 0)
if err != nil {
log.Fatalln(err)
}
"HELLO WORLD"がどうしてbyte配列(72とか69とか)になるの?って人はこちらを参照。(僕は知りませんでした...)
###ファイルの読取機能(ReadFile)
func ReadFile(filename string) ([]byte, error) {
...
}
ファイルを読み込むときには、ReadFileファンクションを使います。
引数はファイル名一つだけですが、[]byteが戻り値なので、こちら側でstringに変換する必要があります。
//main.goの同階層にあるsample.txtを参照
data, _ := ioutil.ReadFile("sample.txt")
//main.goの1階層上にあるfileフォルダの中にあるsample.txtを参照
data, _ := ioutil.ReadFile("../file/sample.txt")
//戻り値の[]byteをstirngに変換
fmt.Println(string(data))