【Golang】tmpファイルを扱う

f:id:suganoo:20180904093850p:plain
Golangにはtempとしてのファイル操作関数があるんですね。便利ですね。
あまり使う用途ないかもしれませんが、パッと見関数で何やってるかわかって可読性がちょっとよくなるかもしれません。

サンプルコード

package main

import (
        "io/ioutil"
        "os"
        "log"
        "fmt"
)

func main() {
        temp_file, err := ioutil.TempFile(os.TempDir(), "tempfile-test-")
        if err != nil {
                fmt.Println("Error, can not create temp file.")
                log.Fatal(err)
        }

        fmt.Println("File : " + temp_file.Name())

        _, err = temp_file.Write([]byte("This is temp file.\n"))
        if err != nil {
                fmt.Println("Error, can not write on temp file.")
                log.Fatal(err)
        }

        //defer os.Remove(temp_file.Name())
}
File : /tmp/tempfile-test-158369842

ポイント

ioutil.TempFile

https://golang.org/pkg/io/ioutil/#TempFile

func TempFile(dir, pattern string) (f *os.File, err error)

dir ディレクトリに、patternから始まるランダムの数値を付加したファイルを作ります。
patterntempfile-test-としてたのでtempfile-test-158369842となりました。

ioutil.TempDir

https://golang.org/pkg/io/ioutil/#TempDir

func TempDir(dir, prefix string) (name string, err error)

ちなみにTempDirはtempディレクトリを作ります。

os.TempDir

https://golang.org/pkg/os/#TempDir

func TempDir() string

基本的に$TMPDIRを返すか、無ければ/tmpを返します。

まとめ

Temp関係の関数があるのは便利かも。
でもどこで使おうか。知ってて損はないかな。

pythonでもそういう機能あるんだね。
pythonで一時ファイル、一時ディレクトリ(tempfile)