type Options … type ErrorAction … const Halt … const SkipNode … var SkipThis … type WalkFunc … // Walk walks the file tree rooted at the specified directory, calling the // specified callback function for each file system node in the tree, including // root, symbolic links, and other node types. // // This function is often much faster than filepath.Walk because it does not // invoke os.Stat for every node it encounters, but rather obtains the file // system node type when it reads the parent directory. // // If a runtime error occurs, either from the operating system or from the // upstream Callback or PostChildrenCallback functions, processing typically // halts. However, when an ErrorCallback function is provided in the provided // Options structure, that function is invoked with the error along with the OS // pathname of the file system node that caused the error. The ErrorCallback // function's return value determines the action that Walk will then take. // // func main() { // dirname := "." // if len(os.Args) > 1 { // dirname = os.Args[1] // } // err := godirwalk.Walk(dirname, &godirwalk.Options{ // Callback: func(osPathname string, de *godirwalk.Dirent) error { // fmt.Printf("%s %s\n", de.ModeType(), osPathname) // return nil // }, // ErrorCallback: func(osPathname string, err error) godirwalk.ErrorAction { // // Your program may want to log the error somehow. // fmt.Fprintf(os.Stderr, "ERROR: %s\n", err) // // // For the purposes of this example, a simple SkipNode will suffice, // // although in reality perhaps additional logic might be called for. // return godirwalk.SkipNode // }, // }) // if err != nil { // fmt.Fprintf(os.Stderr, "%s\n", err) // os.Exit(1) // } // } func Walk(pathname string, options *Options) error { … } // defaultErrorCallback always returns Halt because if the upstream code did not // provide an ErrorCallback function, walking the file system hierarchy ought to // halt upon any operating system error. func defaultErrorCallback(_ string, _ error) ErrorAction { … } // walk recursively traverses the file system node specified by pathname and the // Dirent. func walk(osPathname string, dirent *Dirent, options *Options) error { … }