Pass variable reference to WalkDirFunc

WBOY
Release: 2024-02-09 08:39:32
forward
1069 people have browsed it

将变量引用传递给 WalkDirFunc

php editor Youzi introduces to you an important concept about variable reference passing - passing the variable reference to WalkDirFunc. In PHP, variable reference passing is a transfer method that allows us to pass a reference to a variable to a function or method, thereby modifying the variable within the function. In this way, we can avoid creating new copies of variables inside the function and improve the execution efficiency of the code. WalkDirFunc is a sample function that can traverse all files in a specified directory and operate on them. Passing a variable reference to WalkDirFunc allows us to operate directly on the passed variable inside the function without returning the modified result. This approach is particularly useful when processing large amounts of data, reducing memory overhead and improving code readability and maintainability.

Question content

I am trying to recursively iterate a given directory and store the names of the found files and their sizes in amap[string]uint32. I found an article describing how to use the path/filepath/walkdir function and walkdirfunc to recursively walk a specified directory.

I'm relatively new to go and can't find a way to pass a reference to my map towalkdirfuncsince its signature only specifies three arguments:

func main() { args := os.args if len(args) != 2 { msg := fmt.sprintf("usage: %v ", args[0]) log.fatal(msg) } fullpath := args[1] dirmap := make(map[string]uint32) filepath.walkdir(fullpath, walk) } // how to create parameter accepting &map[string]uint32 func walk(path string, entry fs.direntry, err error) error { if err != nil { return err } if !entry.isdir() { // add entry and it's size to dirmap file, err := os.stat(path) if err != nil { log.println("error determining file size:", err) } size := file.size() // add path and size to dirmap } else if entry.isdir() { // recurse here } else { log.println("unhandled branch:") log.println(entry.info()) } return nil }
Copy after login

EDIT: Sincewalkis thewalkdirfuncpassed tofilepath.walkdir, it is necessary to pass the map starting here. In python I would use named parameters to accomplish this, but what is the best way in go?

func main() { args := os.Args ... fullPath := args[1] dirMap := make(map[string]uint32) // dirMap should be passed here filepath.WalkDir(fullPath, walk) }
Copy after login

Solution

Useclosure. Change walk to:

func walk(dirmap map[string]uint32, path string, entry fs.direntry, err error) error { ... }
Copy after login

Call walkdir like this:

dirMap := make(map[string]uint32) filepath.WalkDir(fullPath, func(path string, entry fs.DirEntry, err error) error { return walk(dirMap, path, entry, err) })
Copy after login

Run the example here://m.sbmmt.com/link/178fde6398864e33aaefae5d2d855f20

The above is the detailed content of Pass variable reference to WalkDirFunc. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!