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

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)
}
|