github.com/twelsh-aw/go/src@v0.0.0-20230516233729-a56fe86a7c81/path/filepath/example_unix_walk_test.go (about) 1 // Copyright 2018 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build !windows && !plan9 6 7 package filepath_test 8 9 import ( 10 "fmt" 11 "io/fs" 12 "os" 13 "path/filepath" 14 ) 15 16 func prepareTestDirTree(tree string) (string, error) { 17 tmpDir, err := os.MkdirTemp("", "") 18 if err != nil { 19 return "", fmt.Errorf("error creating temp directory: %v\n", err) 20 } 21 22 err = os.MkdirAll(filepath.Join(tmpDir, tree), 0755) 23 if err != nil { 24 os.RemoveAll(tmpDir) 25 return "", err 26 } 27 28 return tmpDir, nil 29 } 30 31 func ExampleWalk() { 32 tmpDir, err := prepareTestDirTree("dir/to/walk/skip") 33 if err != nil { 34 fmt.Printf("unable to create test dir tree: %v\n", err) 35 return 36 } 37 defer os.RemoveAll(tmpDir) 38 os.Chdir(tmpDir) 39 40 subDirToSkip := "skip" 41 42 fmt.Println("On Unix:") 43 err = filepath.Walk(".", func(path string, info fs.FileInfo, err error) error { 44 if err != nil { 45 fmt.Printf("prevent panic by handling failure accessing a path %q: %v\n", path, err) 46 return err 47 } 48 if info.IsDir() && info.Name() == subDirToSkip { 49 fmt.Printf("skipping a dir without errors: %+v \n", info.Name()) 50 return filepath.SkipDir 51 } 52 fmt.Printf("visited file or dir: %q\n", path) 53 return nil 54 }) 55 if err != nil { 56 fmt.Printf("error walking the path %q: %v\n", tmpDir, err) 57 return 58 } 59 // Output: 60 // On Unix: 61 // visited file or dir: "." 62 // visited file or dir: "dir" 63 // visited file or dir: "dir/to" 64 // visited file or dir: "dir/to/walk" 65 // skipping a dir without errors: skip 66 }