Go 言語でファイルを書き込む

Beginner

This tutorial is from open-source community. Access the source code

はじめに

この実験では、Go 言語でファイルを書き込む能力をテストします。文字列をファイルに書き込む方法やバイト列をファイルに書き込む方法、そしてバッファ付きライターを使う方法を学びます。

ファイルの書き込み

文字列とバイト列をファイルに書き込み、バッファ付きライターを使用する Go プログラムを書かなければなりません。

  • プログラムは、文字列とバイト列をファイルに書き込む必要があります。
  • プログラムは、バッファ付きライターを使用する必要があります。
## ファイル書き込みコードを実行してみましょう。
$ go run writing-files.go
wrote 5 bytes
wrote 7 bytes
wrote 9 bytes

## 次に、書き込まれたファイルの内容を確認します。
$ cat /tmp/dat1
hello
go
$ cat /tmp/dat2
some
writes
buffered

## 次に、これまで見てきたファイル I/O の考え方を
## `stdin` と `stdout` ストリームに適用してみましょう。

以下が完全なコードです。

// Go 言語でファイルを書き込む方法は、
// 先ほど読み取りに使ったものと同じパターンになります。

package main

import (
    "bufio"
    "fmt"
    "os"
)

func check(e error) {
    if e!= nil {
        panic(e)
    }
}

func main() {

    // まずは、文字列を(または単にバイト列を)
    // ファイルに書き出す方法を見てみましょう。
    d1 := []byte("hello\ngo\n")
    err := os.WriteFile("/tmp/dat1", d1, 0644)
    check(err)

    // より細かい書き込みを行うには、書き込み用に
    // ファイルを開きます。
    f, err := os.Create("/tmp/dat2")
    check(err)

    // ファイルを開いた直後に `Close` を呼び出すのが
    // 慣例です。
    defer f.Close()

    // 予想通り、バイト列を `Write` できます。
    d2 := []byte{115, 111, 109, 101, 10}
    n2, err := f.Write(d2)
    check(err)
    fmt.Printf("wrote %d bytes\n", n2)

    // `WriteString` も利用できます。
    n3, err := f.WriteString("writes\n")
    check(err)
    fmt.Printf("wrote %d bytes\n", n3)

    // 書き込みを安定したストレージにフラッシュするには、
    // `Sync` を呼び出します。
    f.Sync()

    // `bufio` は、先ほど見たバッファ付きリーダーに加えて、
    // バッファ付きライターも提供しています。
    w := bufio.NewWriter(f)
    n4, err := w.WriteString("buffered\n")
    check(err)
    fmt.Printf("wrote %d bytes\n", n4)

    // すべてのバッファ操作が基礎となるライターに
    // 適用されることを確認するには、`Flush` を呼び出します。
    w.Flush()

}

まとめ

この実験では、Go 言語で文字列をファイルに書き込む方法とバイト列をファイルに書き込む方法、そしてバッファ付きライターを使う方法を学びました。