
* Remove use of deprecated ioutil functions from examples * Remove usage of ioutil from gobyexample's own scripts + regenerate output
66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
// Throughout program execution, we often want to create
|
|
// data that isn't needed after the program exits.
|
|
// *Temporary files and directories* are useful for this
|
|
// purpose since they don't pollute the file system over
|
|
// time.
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
func check(e error) {
|
|
if e != nil {
|
|
panic(e)
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
|
|
// The easiest way to create a temporary file is by
|
|
// calling `os.CreateTemp`. It creates a file *and*
|
|
// opens it for reading and writing. We provide `""`
|
|
// as the first argument, so `os.CreateTemp` will
|
|
// create the file in the default location for our OS.
|
|
f, err := os.CreateTemp("", "sample")
|
|
check(err)
|
|
|
|
// Display the name of the temporary file. On
|
|
// Unix-based OSes the directory will likely be `/tmp`.
|
|
// The file name starts with the prefix given as the
|
|
// second argument to `os.CreateTemp` and the rest
|
|
// is chosen automatically to ensure that concurrent
|
|
// calls will always create different file names.
|
|
fmt.Println("Temp file name:", f.Name())
|
|
|
|
// Clean up the file after we're done. The OS is
|
|
// likely to clean up temporary files by itself after
|
|
// some time, but it's good practice to do this
|
|
// explicitly.
|
|
defer os.Remove(f.Name())
|
|
|
|
// We can write some data to the file.
|
|
_, err = f.Write([]byte{1, 2, 3, 4})
|
|
check(err)
|
|
|
|
// If we intend to write many temporary files, we may
|
|
// prefer to create a temporary *directory*.
|
|
// `os.MkdirTemp`'s arguments are the same as
|
|
// `CreateTemp`'s, but it returns a directory *name*
|
|
// rather than an open file.
|
|
dname, err := os.MkdirTemp("", "sampledir")
|
|
check(err)
|
|
fmt.Println("Temp dir name:", dname)
|
|
|
|
defer os.RemoveAll(dname)
|
|
|
|
// Now we can synthesize temporary file names by
|
|
// prefixing them with our temporary directory.
|
|
fname := filepath.Join(dname, "file1")
|
|
err = os.WriteFile(fname, []byte{1, 2}, 0666)
|
|
check(err)
|
|
}
|