Golang filesystem

From wikinotes
Revision as of 16:15, 18 June 2022 by Will (talk | contribs) (Created page with " = Errors = <blockquote> <syntaxhighlight lang="go"> require "errors" require "os" require "io/fs" _, err := os.Stat("foo.bar") if errors.Is(err, fs.ErrExist) {...} if errors.Is(err, fs.ErrNotExist) {...} if errors.Is(err, fs.ErrPermission) {...} if errors.Is(err, fs.ErrPermission) {...} </syntaxhighlight> {{ expand | The old method defines <code>Is${N}</code> functions to test for various <code>os</code> package errors. | <syntaxhighlight lang="go"> require "os" //...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Errors

require "errors"
require "os"
require "io/fs"

_, err := os.Stat("foo.bar")
if errors.Is(err, fs.ErrExist) {...}
if errors.Is(err, fs.ErrNotExist) {...}
if errors.Is(err, fs.ErrPermission) {...}
if errors.Is(err, fs.ErrPermission) {...}

The old method defines Is${N} functions to test for various os package errors.


require "os"

// example filesystem operations that create errors
info, err := os.Stat("foo.bar")
fd, err := os.Create("/etc/foo")

// example error checks
if os.IsExist(err) {...}
if os.IsNotExist(err) {...}
if os.IsPermission(err) {...}

Locations

// XDG spec
dir, err := os.UserHomeDir()
dir, err := os.UserConfigDir()
dir, err := os.UserCacheDir()

Common Operations

import "os"
import "errors"

// check if file exists
if _, err := os.Stat("/var/foo.txt"); errors.Is(err, fs.ErrNotExist) {
    fmt.Println("file does not exist!")
}

dir, err := os.Getwd()
err := os.Chmod("foo.txt", 0644)
err := os.Chown("foo.txt", -1, -1)          // '-1' means do not change uid/gid
err := os.Chown("foo.txt", 1000, -1)        // set uid '1000' as owner

err := os.Link("/var/foo", "/var/bar")      // hardlink
err := os.Symlink("/var/foo", "/var/bar")   // symlink
err := os.Mkdir("/var/foo")                 // create directory (non recursively)
err := os.MkdirAll("/var/foo/bar/baz")      // creates directory (recursively)

err := os.Remove("/var/tmp/foo.bar")
err := os.RemoveAll("/var/tmp/foo")
err := os.Rename("a", "b")

Temporary Directories

// creates tempdir,
// '*' in filename is placement of random str
// you must delete!
path, err := os.MkdirTemp("/var/tmp", "cache-*")
defer os.RemoveAll(path)

Files

For more details, see golang input/output

File.Create
File.CreateTemp
File.NewFile
File.Open

File.Write
File.WriteString

File.Stat
File.FileInfo