Golang filesystem: Difference between revisions

From wikinotes
No edit summary
Line 56: Line 56:
</blockquote><!-- Locations -->
</blockquote><!-- Locations -->


= Common Operations =
= Filesystem =
<blockquote>
<blockquote>
<syntaxhighlight lang="go">
<syntaxhighlight lang="go">
Line 81: Line 81:
err := os.Rename("a", "b")
err := os.Rename("a", "b")
</syntaxhighlight>
</syntaxhighlight>
</blockquote><!-- Common Operations -->
</blockquote><!-- Filesystem -->
 
= Filepaths =
<blockquote>
<syntaxhighlight lang="go">
import "path"
</syntaxhighlight>
</blockquote><!-- Filepaths -->


= Files =
= Files =

Revision as of 16:49, 18 June 2022

Documentation

os (os-specific filesystem operations) https://pkg.go.dev/os@go1.18.3
io/ioutil (read/write) https://pkg.go.dev/io/ioutil@go1.18.3
io/fs (filesystem) https://pkg.go.dev/io/fs@go1.18.3

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

Filesystem

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

Filepaths

import "path"

Files

For more details, see golang input/output

File.Create
File.NewFile
File.Open

File.Write
File.WriteString

File.Stat
File.FileInfo
require "os"

os.WriteFile("/var/tmp/foo.txt", []byte("abc"), 0644)

conts, err := os.ReadFile("/var/tmp/foo.txt")

Temporary Files/Directories

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)
File.CreateTemp