Goことはじめ(ファイルのRead/Write)
http://gihyo.jp/dev/feature/01/go_4beginners/0004?page=2
より学んだことメモ
package main import ( "fmt" "log" "os" ) // // ファイルの書き込み // func FileWriteFunc() { fmt.Println("ファイルの書き込み --------- ") // ファイルを生成 file, err := os.Create("./file.txt") if err != nil { log.Fatal(err) } // 終了時にファイルを閉じる defer file.Close() // 書き込むデータを[]byteで用意する message := []byte("hello world\n") // Write()を用いて書き込む _, err = file.Write(message) if err != nil { // エラー処理 log.Fatal(err) } // 直接文字列を渡す版1 // _, err = file.WriteString("hello world\n") // 直接文字列を渡す版2 // _, err = fmt.Fprint(file, "hello world\n") } // // ファイルの読み込み // func FileReadFunc() { fmt.Println("ファイルの読み込み --------- ") // ファイルを開く file, err := os.Open("./file.txt") if err != nil { // エラー処理 log.Fatal(err) } // プログラムが終わったらファイルを閉じる defer file.Close() // 12byte格納可能なスライスを用意する message := make([]byte, 12) // ファイル内のデータをスライスに読み出す // io.Reader インターフェースを使う // type Reader interface { // Read(p []byte) (n int, err error) // } _, err = file.Read(message) if err != nil { log.Fatal(err) } // ファイルの中身をすべて読み出す // ioutil.ReadAllを使えば、事前にbyte列を準備する必要はない // file, _ := os.Open("./file.txt") // message, err := ioutil.ReadAll(file) // 文字列にして表示 fmt.Print(string(message)) } func main() { FileWriteFunc() FileReadFunc() }
JSONのEncoder/Decoder経由の保存
package main import ( "fmt" "log" "os" "encoding/json" ) type Person struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"-"` Age int `json:"age"` Address string `json:"address,omitempty"` memo string } // // JSONの書き出し // func JsonWriteFunc() { fmt.Println("JSONの書き出し ---------- ") person := &Person{ ID: 1, Name: "Hogeo", Email: "hogeo@example.com", Age: 20, Address: "", memo: "TestUser", } // ファイルを開く file, err := os.Create("./person.json") if err != nil { log.Fatal(err) } defer file.Close() // エンコーダの取得 encoder := json.NewEncoder(file) // JSONエンコードしたデータの書き込み // byte[]に変換しなくても直接構造体を渡せる err = encoder.Encode(person) if err != nil { log.Fatal(err) } } // // JSONの読み込み // func JsonReadFunc() { fmt.Println("JSONの読み込み ---------- ") // ファイルを開く file, err := os.Open("./person.json") if err != nil { log.Fatal(err) } defer file.Close() // データを書き込む変数 var person Person // デコーダの取得 decoder := json.NewDecoder(file) // JSONデコードしたデータの読み込み // JSONフォーマットに誤りがあればエラー // 構造体にないフィールドは無視される err = decoder.Decode(&person) if err != nil { log.Fatal(err) } // 読み出した結果の表示 fmt.Println(person) } func main() { JsonWriteFunc() JsonReadFunc() }
ioutls使うと便利
http://gihyo.jp/dev/feature/01/go_4beginners/0004?page=3
package main import ( "fmt" "io/ioutil" "log" ) // // ファイルの操作は、 // io/ioutilsパッケージを使うとより簡単にできる // func main() { hello := []byte("hello world\n") // ファイルにメッセージを書き込む // 第2引数にバイト列、第3引数にパーミッション err := ioutil.WriteFile("./file.txt", hello, 0666) if err != nil { log.Fatal(err) } // ファイルの中身を全て読みだす message, err := ioutil.ReadFile("./file.txt") if err != nil { log.Fatal(err) } fmt.Print(string(message)) }