実践 Go: 一時ファイルとディレクトリ

プログラムの実行中に、プログラム終了後に不要になるデータを作成したい場合があります。一時ファイルとディレクトリは、時間の経過に伴ってファイルシステムを汚染しないため、この目的に役立ちます。

package main
import (
    "fmt"
    "os"
    "path/filepath"
)
func check(e error) {
    if e != nil {
        panic(e)
    }
}
func main() {

一時ファイルを作成する最も簡単な方法はos.CreateTempを呼び出すことです。これにより、ファイルが作成されかつ読み書き用に開かれます。最初の引数に""を指定した場合、os.CreateTempはOSの既定の場所にファイルを作成します。

    f, err := os.CreateTemp("", "sample")
    check(err)

一時ファイルの名前を表示します。Unix ベースの OS では、ディレクトリはおそらく/tmpになります。ファイル名はos.CreateTempへの 2 番目の引数として指定されたプレフィックスで始まり、残りの部分は並行呼び出しが常に異なるファイル名を作成するように自動的に選択されます。

    fmt.Println("Temp file name:", f.Name())

処理が完了したらファイルをクリーンアップします。OS は一時ファイルをしばらくしてから自動的にクリーンアップする可能性がありますが、明示的に行うことをお勧めします。

    defer os.Remove(f.Name())

ファイルにデータを書き込むことができます。

    _, err = f.Write([]byte{1, 2, 3, 4})
    check(err)

大量の一時ファイルを作成する必要がある場合は、一時ディレクトリを作成することをお勧めします。os.MkdirTempの引数はCreateTempの引数と同じですが、オープンファイルではなくディレクトリを返します。

    dname, err := os.MkdirTemp("", "sampledir")
    check(err)
    fmt.Println("Temp dir name:", dname)
    defer os.RemoveAll(dname)

一時ディレクトリをプレフィックスとして付けることで、一時ファイル名を合成できます。

    fname := filepath.Join(dname, "file1")
    err = os.WriteFile(fname, []byte{1, 2}, 0666)
    check(err)
}
$ go run temporary-files-and-directories.go
Temp file name: /tmp/sample610887201
Temp dir name: /tmp/sampledir898854668

次の例: 埋め込みディレクティブ.