Working with Go
Directories
Read Directory Recursively
Use the filepath.Walk
function to recursively walk down a directory.
The Walk
function accepts a path, and WalkFunc
as its parameters.
The WalkFunc
signature is func(path string, info os.FileInfo, err error) error
, below is an example using an anonymous function with that signature.
In the WalkFunc
if you want to skip an entire directory, return filepath.SkipDir
which is a special error variable defined in the library.
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
path := "./dir"
filepath.Walk(path, func(fn string, fi os.FileInfo, err error) error {
if err != nil {
fmt.Println("Walker Error: ", err)
return err
}
if fi.IsDir() {
fmt.Println("Directory: ", fn)
if fi.Name() == "skipme" {
return filepath.SkipDir
}
} else {
fmt.Println("File: ", fn)
}
return nil
})
}
Create Directory if not exists
Check if directory exists, create directory if it does not.
pathdir := filepath.Join(path, dir)
if _, err := os.Stat(pathdir); os.IsNotExist(err) {
mdErr := os.Mkdir(dirpath, 0755)
if mdErr != nil {
fmt.Println("Error making directory", mdErr)
}
}
Get User Home Directory
A platform independent way to get the user's home directory.
import "os/user"
usr, err := user.Current()
fmt.Println("User Home Directory:", usr.HomeDir)